使用DependencyResolver进行MVC 3的Controller实例化时出错

时间:2011-11-16 12:17:31

标签: asp.net .net asp.net-mvc dependency-injection ioc-container

我正在使用MVC 3并在应用程序启动时使用以下代码...

UnityContainer container = new UnityContainer();

new UnityMappings(container);

DependencyResolver.SetResolver(new UnityServiceLocator(container));

现在,当应用程序运行时,我收到以下错误(但有时只是)...

  

尝试获取类型实例时发生激活错误   IControllerFactory,键“”

有趣的是,如果我继续使用网络请求,网站将正常运行。

有什么想法吗?当这种方法运作正常时,我无法看到我做的与以前有什么不同。

干杯,伊恩。

2 个答案:

答案 0 :(得分:6)

MVC3要求的不仅仅是来自DependencyResolver的控制器。对于大多数人来说,如果DependencyResolver没有返回实例,MVC3会回退到默认实现。

在您的情况下,它会请求您的IoC容器未知的IControllerFactory,它会抛出一个由UnityServiceLocator实现捕获的异常,并返回null。 MVC然后回退到默认控制器工厂。

与其他IoC容器不同,Unity不提供可选的TryResolve,因此不支持DependencyResolver的正确无异常实现。

答案 1 :(得分:0)

我建议首先查看配置并确保一切正确,然后我会确保我拥有项目中引用的Unity所需的所有程序集。该错误消息可能(根据我的经验)指向配置中的错误或缺少DLL,可能是您要在容器中加载的程序集或Unity加载的DLL所需的另一个DLL?

希望这有帮助。