【问题标题】:Ninject MVC together with WCF extension does not work with InRequestScopeNinject MVC 与 WCF 扩展一起不适用于 InRequestScope
【发布时间】:2012-01-03 13:00:07
【问题描述】:

我已经让 Ninject MVC 与 Ninject WCF 一起工作以使其工作我在 CreateKernel 方法中添加了两行

kernel.Bind<ServiceHost>().To<NinjectServiceHost>();
KernelContainer.Kernel = kernel;

依赖项被注入,但没有调用 Dispose 方法,我已经尝试过使用 InRequestScope 和我自己的作用域 Func 返回 OperationContext.Current 作为 Scope 对象,但没有调用 dispose。

2012-09-05 更新 此信息已过时,对于从 Nuget Ninject.MV3 和 Ninject.Extensions.WCF (3.x) 下载 MVC 和 WCF,MVC Nuget 模板将添加 Ninject 引导程序 NinjectWebCommon.cs 并在 svc 中添加对 ninject 的支持 编辑 svc xml(右键单击/查看标记)并将 Factory="Ninject.Extensions.Wcf.NinjectServiceHostFactory" 添加到 xml 节点

【问题讨论】:

  • 我赞成这个问题,因为它展示了如何同时为 MVC 和 WCF 使用 NInject,这真的很难找到一个好的例子。
  • 此信息已过时,请参阅编辑

标签: asp.net-mvc wcf ninject


【解决方案1】:

我无法回复 Remo 的回答,因为我是 stackoverflow n00b,但“System.Runtime.CompilerServices.ExtensionAttribute”异常的问题是它已从 .net 4.0 中的 System.Core 移动到 .net 4.0 中的 mscorlib 。净 4.5。如果您安装 .net 4.5,问题就会消失。我认为某些东西是使用 .net 4.5 构建的。 https://github.com/ninject/Ninject.Web.Common/issues/3 听起来很快就会修复。 至于 Wcf InRequestScope 问题,Remo 今天在谷歌群组上给了我一些帮助...... “添加一个派生自“Ninject.GlobalKernelRegistrationModule”的新模块并将其加载到内核中。不过,这将在最终版本中得到修复。”

即类似...

public class MyModule : Ninject.GlobalKernelRegistrationModule<WcfRequestScopeCleanup>
{
}

//And where you load your modules...
kernel.Load<MyModule>();

【讨论】:

    【解决方案2】:

    我建议使用 Nuget 提供的 Ninject 3.0.0-rc2。 InRequestScope 同时适用于 Web 和 WCF 请求。

    【讨论】:

    • 谢谢,我尝试了一个新的 MVC3 项目,下载了 Ninject.Web.Common ... 不得不在 NinjectWebCommon 类中将 OnePerRequestModule 更改为 OnePerRequestHttpModule(在 nuget 模板中出错?)无论如何,现在我得到“可以不从程序集 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 加载类型 'System.Runtime.CompilerServices.ExtensionAttribute'。”
    • 看起来它是 Webactivator 和 Ninject 之间的冲突.. 两者都可以独立工作,但在一起我会遇到错误
    • 使用最新的网络激活器,该软件包非常适合我。这一定是与其他一些包/库冲突。
    • 我已经在几台不同的机器上尝试过,在一个独立的测试项目中,最新的 nuget 管理器等。奇怪的是你在 Github 上提到你已经解决了 nuget 模板的问题我在上面提到过,但是我收到的那个有错误,看起来 nuget 没有发送最新版本...我们的客户使用 XP,我猜你有 win7 可能是旧系统上的问题,将尝试使用我的 win7 x64今晚我回家时设置..
    • 在我家的开发机器上得到一个完全不同的错误,“找不到方法:'System.Delegate System.Reflection.MethodInfo.CreateDelegate(System.Type)'。”在线 bootstrapper.Initialize(CreateKernel)。清理 MVC3 项目(默认 MVC 项目模板),使用最新的 Nuget 和命令“Install-Package Ninject.Web.Common -Pre”下载 Ninject Web 扩展。我在代码中唯一改变的是 NinjectWebCommon.cs 中的东西来构建它(使用 httpmodule 的语句和名称),不要添加绑定或任何东西.. 尝试使用默认的 1.4.4 和 1.5 的 Webactivator
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 2011-05-28
    • 2013-12-27
    • 1970-01-01
    • 2020-02-21
    • 1970-01-01
    相关资源
    最近更新 更多