如何Ninject在ASP.NET MVC创建控制器? [英] How does Ninject create controller in ASP.NET MVC?

查看:106
本文介绍了如何Ninject在ASP.NET MVC创建控制器?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这可能是愚蠢的问题,但我在看Ninject来源并没有看到NInject注册自己的控制器工厂。我还没有看到任何 IControllerFactory Ninject.Web.Mvc类组装。我缺少的东西吗?如何Ninject创建控制器和参数注入到构造?


解决方案

  1. 比方说,我们正在寻找/任务/索引。

  2. Ninject MVC应用程序现在使用 DefaultControllerFactory ,同样作为非Ninject应用。

  3. DefaultControllerFactory 发现键入控制器( TaskController )。

  4. DefaultControllerFactory 有一个称为内部类 DefaultControllerActivator DefaultControllerActivator 的方法叫做创建,它返回控制器实例。 DefaultControllerFactory 要求 DefaultControllerActivator TaskController 类型的实例。

  5. DefaultControllerActivator.Create 使用的IDependencyResolver 。这是 Ninject 用武之地。因为 Ninject 实现了自己的解析器,并将其设置在应用程序启动时,他得到请求 TaskController 实例。

  6. 剩下的就是方便。 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?

解决方案

  1. Lets say we are looking for "/Task/Index".
  2. Ninject MVC applications use now DefaultControllerFactory, the same as non-Ninject applications.
  3. DefaultControllerFactory finds type for controller (TaskController).
  4. DefaultControllerFactory has internal class called DefaultControllerActivator. DefaultControllerActivator has method called Create, which returns controller instance. DefaultControllerFactory asks DefaultControllerActivator for TaskController type instance.
  5. DefaultControllerActivator.Create uses IDependencyResolver. This is where Ninject comes in. Since Ninject implements its own resolver and sets it at the start of application, he gets request for TaskController instance.
  6. The rest is easy. Ninject finds constructor for this type, injects parameters, returns controller instance.

这篇关于如何Ninject在ASP.NET MVC创建控制器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆