我正在使用MVC 3并在应用程序启动时使用以下代码...
UnityContainer container = new UnityContainer();
new UnityMappings(container);
DependencyResolver.SetResolver(new UnityServiceLocator(container));
现在,当应用程序运行时,我收到以下错误(但有时只是)...
尝试获取类型实例时发生激活错误 IControllerFactory,键“”
有趣的是,如果我继续使用网络请求,网站将正常运行。
有什么想法吗?当这种方法运作正常时,我无法看到我做的与以前有什么不同。
干杯,伊恩。
答案 0 :(得分:6)
MVC3要求的不仅仅是来自DependencyResolver
的控制器。对于大多数人来说,如果DependencyResolver没有返回实例,MVC3会回退到默认实现。
在您的情况下,它会请求您的IoC容器未知的IControllerFactory
,它会抛出一个由UnityServiceLocator
实现捕获的异常,并返回null。 MVC然后回退到默认控制器工厂。
与其他IoC容器不同,Unity不提供可选的TryResolve
,因此不支持DependencyResolver
的正确无异常实现。
答案 1 :(得分:0)
我建议首先查看配置并确保一切正确,然后我会确保我拥有项目中引用的Unity所需的所有程序集。该错误消息可能(根据我的经验)指向配置中的错误或缺少DLL,可能是您要在容器中加载的程序集或Unity加载的DLL所需的另一个DLL?
希望这有帮助。