Nil*_*Pun 3 dependency-injection sitecore autofac sitecore8 sitecore8.2
我在尝试使用Sitecore 8.2的Autofac DI时收到以下错误:
依赖项解析程序的类型为"Sitecore.Mvc.Controllers.SitecoreDependencyResolver",但预计类型为"Autofac.Integration.Mvc.AutofacDependencyResolver".它似乎也没有使用Castle Project中的DynamicProxy进行包装.此问题可能是DynamicProxy实现更改或使用其他代理库来包装依赖项解析程序的结果.
任何想法:
这AutofacDependencyResolver是因为不是MVC的当前依赖性解析器.以下是如何AutofacDependencyResolver.Current尝试查找自身的当前实例的说明:
http://docs.autofac.org/en/latest/integration/mvc.html#using-the-current-autofac-dependencyresolver
所以你需要设置AutofacDependencyResolverMVC.通常,您只需按照本指南操作:
http://docs.autofac.org/en/latest/integration/mvc.html#quick-start
虽然,这就是你可能已经在做的事情.问题是,在某些时候,Sitecore将使用自己的依赖解析器覆盖已配置的依赖项解析器,并在 Application_Start执行后发生.因此AutofacDependencyResolver最终没有被MVC使用.
请遵循以下指南:
http://www.seanholmesby.com/safe-dependency-injection-for-mvc-and-webapi-within-sitecore/
它的本质是你需要创建一个AutofacDependencyResolver首先使用的自定义依赖项解析器,如果找不到依赖项,它将回退到SitecoreDependencyResolver.
依赖性解析器应配置为Sitecore initialize管道中的处理器,这将确保Sitecore的依赖性解析器已经可用.
您可以在此GitHub存储库中找到特定于Autofac的示例:
如果上述方法无效,您可以告诉Autofac如何获取当前的解析器.
创建Autofac解析程序时,将该对象保存在变量中,并在MVC中注册链接的解析程序后,使用以下方法AutofacDependencyResolver.SetAutofacDependencyResolverAccessor():
var autofacResolver = new AutofacDependencyResolver(container);
IDependencyResolver chainedMvcResolver = new ChainedMvcResolver(
autofacResolver,
DependencyResolver.Current);
DependencyResolver.SetResolver(chainedMvcResolver);
AutofacDependencyResolver.SetAutofacDependencyResolverAccessor(() => autofacResolver);
Run Code Online (Sandbox Code Playgroud)
现在,Autofac不会直接在DependencyResolver.CurrentCastle的DynamicProxy中寻找自己的解析器.它将直接使用您提供的解析器对象.
| 归档时间: |
|
| 查看次数: |
733 次 |
| 最近记录: |