我有一个 .Net MVC 3.0 应用程序,我正在使用 Ninject 3.0。我没有安装任何nuget。我引用了 Ninject.dll、Ninject.Web.Common.dll 和 Ninject.Web.Mvc.dll(以及其他 2 个)。我想在自定义 HttpModule 中注入依赖项,但我不知道如何使它与 NinjectHttpApplication 一起工作。
我有这个错误:
激活 IntPtr 时出错
没有匹配的绑定可用,并且类型不是自绑定的。
激活路径:
3) 将依赖 IntPtr 注入到 Func{IKernel} 类型的构造函数的参数方法中
2) 将依赖 Func{IKernel} 注入到 HttpApplicationInitializationHttpModule 类型的构造函数的参数lazyKernel
1) 请求IHttpModule
这是代码:
全球.asax
public class MvcApplication: NinjectHttpApplication
{
...
protected override void OnApplicationStarted()
{
base.OnApplicationStarted();
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
protected override IKernel CreateKernel()
{
var modules = new INinjectModule[]
{
new ServiceModule()
};
IKernel kernel = new StandardKernel(modules);
return kernel;
}
}
网络配置
<httpModules>
<add name="NinjectHttpModule" type="Ninject.Web.Common.NinjectHttpModule"/>
</httpModules>
自定义HttpModule.cs
public class CustomHttpModule : IHttpModule
{
private ITesttService service;
public CustomHttpModule(ITesttService service)
{
this.service = service;
}
...
}
服务模块.cs
public class ServiceModule : NinjectModule
{
public override void Load()
{
...
Kernel.Bind<ITestService>().To<TestService>();
Kernel.Bind<IHttpModule>().To<CustomHttpModule>().InSingletonScope();
}
}
这个绑定解决了我的问题:
kernel.Bind<Func<IKernel>>().ToMethod(c => () => this.Kernel);
但是根据github上的这篇文章,我不应该这样做。
你能告诉我我做错了什么或错过了什么吗?