如何Ninject在ASP.NET MVC创建控制器? [英] How does Ninject create controller in ASP.NET MVC?
本文介绍了如何Ninject在ASP.NET MVC创建控制器?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
这可能是愚蠢的问题,但我在看Ninject来源并没有看到NInject注册自己的控制器工厂。我还没有看到任何 IControllerFactory
在 Ninject.Web.Mvc类
组装。我缺少的东西吗?如何Ninject创建控制器和参数注入到构造?
解决方案
- 比方说,我们正在寻找/任务/索引。
- Ninject MVC应用程序现在使用
DefaultControllerFactory
,同样作为非Ninject应用。 -
DefaultControllerFactory
发现键入控制器(TaskController
)。 -
DefaultControllerFactory
有一个称为内部类DefaultControllerActivator
。DefaultControllerActivator
的方法叫做创建
,它返回控制器实例。DefaultControllerFactory
要求DefaultControllerActivator
为TaskController
类型的实例。 -
DefaultControllerActivator.Create
使用的IDependencyResolver
。这是Ninject
用武之地。因为Ninject
实现了自己的解析器,并将其设置在应用程序启动时,他得到请求TaskController
实例。 - 剩下的就是方便。
Ninject
发现构造这种类型,注入参数,返回控制器实例。
This may be stupid question, but I am looking at Ninject sources and don't see NInject registering its own controller factory. I also don't see any IControllerFactory
class in Ninject.Web.Mvc
assembly. Am I missing something? How does Ninject create controller and inject parameters into constructor?
解决方案
- Lets say we are looking for "/Task/Index".
- Ninject MVC applications use now
DefaultControllerFactory
, the same as non-Ninject applications. DefaultControllerFactory
finds type for controller (TaskController
).DefaultControllerFactory
has internal class calledDefaultControllerActivator
.DefaultControllerActivator
has method calledCreate
, which returns controller instance.DefaultControllerFactory
asksDefaultControllerActivator
forTaskController
type instance.DefaultControllerActivator.Create
usesIDependencyResolver
. This is whereNinject
comes in. SinceNinject
implements its own resolver and sets it at the start of application, he gets request forTaskController
instance.- The rest is easy.
Ninject
finds constructor for this type, injects parameters, returns controller instance.
这篇关于如何Ninject在ASP.NET MVC创建控制器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文