这可能是个愚蠢的问题,但我正在查看 Ninject 来源,并没有看到 NInject 注册了自己的控制器工厂。我也没有在汇编中看到任何IControllerFactory
课程。Ninject.Web.Mvc
我错过了什么吗?Ninject 如何创建控制器并将参数注入构造函数?
问问题
2057 次
3 回答
13
- 假设我们正在寻找“/Task/Index”。
- 现在使用 Ninject MVC 应用程序
DefaultControllerFactory
,与非 Ninject 应用程序相同。 DefaultControllerFactory
查找控制器 (TaskController
) 的类型。DefaultControllerFactory
有内部类称为DefaultControllerActivator
.DefaultControllerActivator
有方法调用Create
,它返回控制器实例。DefaultControllerFactory
要求类型实例DefaultControllerActivator
。TaskController
DefaultControllerActivator.Create
使用IDependencyResolver
. 这就是Ninject
进来的地方。由于Ninject
实现了自己的解析器并在应用程序开始时设置它,因此他得到了请求TaskController
。- 其余的很容易。
Ninject
找到这种类型的构造函数,注入参数,返回控制器实例。
于 2011-02-19T05:40:04.040 回答
0
由于控制器是具体类型,Ninject 会进行自绑定。以下是摘录自ninject.complex.com
请记住,只有具体类型可以自绑定;抽象类型和接口将不起作用。此外,如果您请求可以自绑定的类型的实例,并且没有为该类型定义绑定,Ninject 将自动创建隐式自绑定。是否要显式定义绑定,或者让 Ninject 解决,这取决于您。
如果您确实需要将参数注入构造函数。您可以创建一个类继承INinjectModule
并在那里进行绑定。
于 2011-10-19T19:26:27.920 回答