gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:14:18 24 4
gpt4 key购买 nike

我有一个关于我已建立的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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com