这可能是一个愚蠢的问题,但我正在查看Ninject的源代码,并没有看到它注册自己的控制器工厂。我在Ninject.Web.Mvc程序集中也看不到任何IControllerFactory类。我是不是遗漏了什么?如何在构造函数中创建控制器和注入参数?
发布于 2011-02-19 13:40:04
假设我们正在寻找“//
DefaultControllerFactory,和非Ninject应用程序一样。DefaultControllerFactory查找控制器的类型(TaskController).DefaultControllerFactory具有名为DefaultControllerActivator的内部类。DefaultControllerActivator有一个名为Create的方法,它返回控制器实例。DefaultControllerFactory向DefaultControllerActivator请求instance.DefaultControllerActivator.Create使用IDependencyResolver的IDependencyResolver类型。这就是Ninject的用武之地。由于Ninject实现了自己的解析器并在应用程序开始时设置解析器,因此他可以很容易地获得instance.TaskController请求。Ninject找到此类型的构造函数,注入参数,返回控制器实例。发布于 2011-02-17 00:18:58
MVC3现在建议在处理DI时使用IDependencyResolver接口,而不是很好的旧IControllerFactory。您可以查看此接口here的更多详细信息。
This is the new Ninject class负责注入依赖项。
发布于 2011-10-20 03:26:28
因为控制器是具体的类型,所以Ninject将进行自我绑定。以下是来自ninject.complex.com的代码片段
请记住,只有具体的类型才能自我绑定;抽象类型和接口将不起作用。此外,如果您请求一个可以自绑定的类型的实例,并且没有为该类型定义绑定,则Ninject将自动创建一个隐式的自绑定。你是想显式地定义你的绑定,还是让Ninject去解决它,这取决于你。
如果您确实需要将参数注入到构造函数中。您可以创建一个从INinjectModule继承的类,并在那里进行绑定。
https://stackoverflow.com/questions/5018810
复制相似问题