Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用NinjectHttpApplication(无nuget)在HttpModule中注入依赖项?_C#_Asp.net Mvc_Dependency Injection_Ninject - Fatal编程技术网

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

C# 如何使用NinjectHttpApplication(无nuget)在HttpModule中注入依赖项?,c#,asp.net-mvc,dependency-injection,ninject,C#,Asp.net Mvc,Dependency Injection,Ninject,我有一个.NETMVC3.0应用程序,我正在使用Ninject 3.0。我没有安装任何nuget。我正在引用Ninject.dll、Ninject.Web.Common.dll和Ninject.Web.Mvc.dll以及其他两个。我想将依赖项注入到定制的HttpModule中,但我不知道如何使它与NinjectHttpApplication一起工作 我有一个错误: 激活IntPtr时出错 没有匹配的绑定可用,并且类型不可自绑定。 激活路径: 3将依赖项IntPtr注入Func{IKernel}类

我有一个.NETMVC3.0应用程序,我正在使用Ninject 3.0。我没有安装任何nuget。我正在引用Ninject.dll、Ninject.Web.Common.dll和Ninject.Web.Mvc.dll以及其他两个。我想将依赖项注入到定制的HttpModule中,但我不知道如何使它与NinjectHttpApplication一起工作

我有一个错误:

激活IntPtr时出错 没有匹配的绑定可用,并且类型不可自绑定。 激活路径: 3将依赖项IntPtr注入Func{IKernel}类型构造函数的参数方法 2将依赖函数{IKernel}注入HttpApplication InitializationHttpModule类型构造函数的参数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>
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上的这个,我不应该这么做


有人能告诉我我做错了什么或遗漏了什么吗?

目前,从NinjectHttpApplication派生NinjectHttpModule时,没有好的方法使用。引导程序以两种方式注册HttpApplicationInitializationHttpModule,一旦加载了NinjectHttpModule,该模块也将加载

不幸的是,没有什么好的地方可以卸载它


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

您有需要手动添加哪些文件的示例/文档吗?Nervermind,我在我的项目副本上尝试了nuget,发现我所需要的都在。基本上,只需将NinjectWebCommon类的代码复制到新的App_Start文件夹中即可!但有一个问题:如果应用程序的启动方式更好,为什么我们仍然可以从Global.asax中的NinjectHttpApplication派生?
kernel.Bind<Func<IKernel>>().ToMethod(c => () => this.Kernel);