asp.net-mvc-2 - 使用Unity IoC的MVC2- Controller 如何解析?

标签 asp.net-mvc-2 dependency-injection inversion-of-control unity-container

我有一个关于我已建立的Unity容器如何解决 Controller 依赖性的问题。我一直在寻找有关此问题的解释,但没有找到关于该主题的任何真正清晰的信息。也许答案正盯着我看……看下面的代码,我相信很多MVC家伙都看过这些代码:

protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)
{
    IController controller;
    try
    {
        controller = container.Resolve(controllerType) as IController;
    }
    catch (Exception ex)
    {
        throw new InvalidOperationException(string.Format("Error resolving controller {0}", controllerType.Name), ex);
    }
    return controller;
}

这就是我在 Controller 工厂中设置的GetControllerInstance的替代。显然, Controller 类型是从Unity容器中解析出来的,但是首先如何在容器中注册它们呢? MVC框架如何知道在容器中注册类型?我意识到类型正在从该容器中解析出来,但是我不喜欢不知道它如何解析 Controller 类型。

最佳答案

对此负责的是DefaultControllerFactory。运作方式如下:

ASP.NET MVC使用反射来列出所有程序集中从Controller继承的所有类型并对其进行缓存。如果您真的想进一步研究源代码或使用反射器,并在DefaultControllerFactory类型上 checkout 此方法:

protected internal virtual Type GetControllerType(
    RequestContext requestContext, string controllerName)

当请求到来时,它使用路由表确定哪个是当前 Controller ,并尝试在缓存的 Controller 类型列表中找到它。如果找到一个,它将调用给定类型的GetControllerInstance方法,以便DI框架可以提供给定类型的 Controller 实例。

关于asp.net-mvc-2 - 使用Unity IoC的MVC2- Controller 如何解析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3612089/

相关文章:

c# - 学习如何处理高流量 asp.net mvc 站点的资源?

asp.net-mvc - 如何在MVC View 中构造if语句

javascript - 为什么他们在 AngularJS 中到处传递数组?

inversion-of-control - IoC 避免注入(inject)容器

c# - 结构图和引用文献,最佳实践是什么?

c# - 最佳实践 : StructureMap and ASP. NET MVC 2 - 抽象基础 Controller 中的 Setter 注入(inject)/构造注入(inject)

asp.net-mvc-2 - ASP.NET MVC2 - 如何创建表单?

java - Spring注入(inject)静态(全局)单例

dependency-injection - 如何在 StructureMap 3 中替换 ObjectFactory 的使用

ios - iOS 中控制反转的框架和静态库有何不同?