ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c# – 如何使用NinjectHttpApplication(无nuget)在HttpModule中注入依赖项?

2019-06-30 05:54:39  阅读:288  来源: 互联网

标签:c dependency-injection asp-net-mvc ninject


我有一个.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

这是代码:

Global.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;
    }
}

Web.Config中

<httpModules>
    <add name="NinjectHttpModule" type="Ninject.Web.Common.NinjectHttpModule"/>
</httpModules>

CustomHttpModule.cs

public class CustomHttpModule : IHttpModule
{
    private ITesttService service;
    public CustomHttpModule(ITesttService service)
    {
        this.service = service;
    }
    ...
}

ServiceModule.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上的这个post,我不应该这样做.

你能告诉我我做错了什么或错过了吗?

解决方法:

目前,在从NinjectHttpApplication派生时,没有好的方法可以使用NinjectHttpModule.引导程序为两种方式注册HttpApplicationInitializationHttpModule,并且只要加载NinjectHttpModule,也会加载此模块.

不幸的是,没有什么好处可以卸载它.

我建议您使用WebActivator代替从NinjectHttpApplication派生.这是让它运行的唯一正确方法.您不必使用nuget以这种方式设置您的应用程序.您也可以手动添加相同的文件并手动引用所有必需的程序集.

标签:c,dependency-injection,asp-net-mvc,ninject
来源: https://codeday.me/bug/20190630/1333659.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有