Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.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
在ASP.NET mvc 4中使用Ninject时是否需要控制器工厂_Asp.net_Ninject - Fatal编程技术网

在ASP.NET mvc 4中使用Ninject时是否需要控制器工厂

在ASP.NET mvc 4中使用Ninject时是否需要控制器工厂,asp.net,ninject,Asp.net,Ninject,关于使用Ninject和asp.NETMVC4,我不知道如何处理google在.net中提供的大量文档 首先,我想知道在asp.net中是否需要控制器工厂 另外,构造函数注入真的是我们用MVC4进行依赖项注入的唯一方法吗?因为当我将属性注入和方法注入用于我的控制器时,它们似乎不起作用,我只使用它将我的数据源接口和我的EfDb类链接到我的应用程序的其余部分 如果您需要一本围绕Ninject构建真正应用程序的好书,请尝试: 或 我通常只关心很少几行代码 public class NinjectC

关于使用Ninject和asp.NETMVC4,我不知道如何处理google在.net中提供的大量文档

首先,我想知道在asp.net中是否需要控制器工厂


另外,构造函数注入真的是我们用MVC4进行依赖项注入的唯一方法吗?因为当我将属性注入和方法注入用于我的控制器时,它们似乎不起作用,我只使用它将我的
数据源接口
和我的
EfDb类
链接到我的应用程序的其余部分

如果您需要一本围绕
Ninject
构建真正应用程序的好书,请尝试:

我通常只关心很少几行代码

public class NinjectControllerFactory : DefaultControllerFactory
{
    private IKernel ninjectKernel;

    public NinjectControllerFactory()
    {
        ninjectKernel = new StandardKernel();
        AddBindings();
    }

    protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
    {
        return controllerType == null
                   ? null
                   : (IController) ninjectKernel.Get(controllerType);
    }

    private void AddBindings()
    {
        ninjectKernel.Bind<IDataSource>().To<EfDb>();
    }
}
公共类NinjectControllerFactory:DefaultControllerFactory
{
私有IKernel-Ninject内核;
公共控制器工厂()
{
ninjectKernel=新的标准内核();
AddBindings();
}
受保护的重写IController GetControllerInstance(RequestContext RequestContext,类型controllerType)
{
返回控制器类型==null
无效的
:(IController)ninjectKernel.Get(controllerType);
}
私有void AddBindings()
{
ninjectKernel.Bind().To();
}
}
然后在
Global.asax.cs
中注册您的
NinjectControllerFactory

ControllerBuilder.Current.SetControllerFactory(新的NinjectControllerFactory())


如您所见,此类使用
方法注入
使用
私有void AddBindings()
。如果您遵循
测试驱动开发(TDD)

请参见此处的文档: ,“唯一需要做的是为其依赖项配置Ninject绑定。即使不添加绑定,Ninject也会找到控制器本身。”


NInject将自动设置您的控制器依赖项(前提是它具有这些类型的绑定)。

但我在某个地方读到,如果您的应用程序继承自NinjectHttpApplication并覆盖适当的方法,控制器将通过IOC容器自动设置依赖项统计。@PeterEdike每个人都有自己的编写代码的方式,这个游戏的全部内容是选择一种有效的风格,并不断改进。我建议您阅读我提到的其中一本书。我对这方面不太了解,但这段代码运行良好。我使用的是MVC5/WebApi2,这种方法对我不起作用@科门格姆的建议奏效了。