我使用Sitecore 8.1 MVC和Autofac作为DI.我想知道将已解析的对象注入sitecore创建的对象的推荐方法是什么,例如管道,命令,计算字段等……例如,我使用的是成员资格提供程序,我需要调用我的业
谢谢
管道处理器,命令等等……基本上是Sitecore创建的任何东西 – 你相当有限.通常的方法是使用服务定位器模式来解决依赖关系:var membershipProvider = DependencyResolver.Current.Resolve<IMembershipProvider>()
还有其他方法.这篇文章:https://cardinalcore.co.uk/2014/07/02/sitecore-pipelines-commands-using-ioc-containers/使用容器工厂类来解决管道中的依赖关系.这是使用的类:
using System; using System.Diagnostics.CodeAnalysis; using Sitecore.Reflection; public class ContainerFactory : IFactory { private readonly IContainerManager containerManager; public ContainerFactory() : this(new LocatorContainerManager()) // service locate an appropriate container { } public ContainerFactory(IContainerManager containerManager) { this.containerManager = containerManager; } public object GetObject(string identifier) { Type type = Type.GetType(identifier); return this.containerManager.Resolve(type); } }
然后,这将被设置为使用配置中的factory属性的事件或处理器的工厂.示例配置:
<sitecore> <events> <event name="item:saved"> <handler factory="ContainerFactory" ref="MyApp.MyHandler, MyApp" method="MyMethod"> <database>master</database> </handler> </event> </events> <pipelines> <MyPipeline> <processor type="1" factory="ContainerFactory" ref="MyApp.MyProcessor, MyApp" /> </MyPipeline> </pipelines> <factories> <factory id="ContainerFactory" type="MyApp.ContainerFactory"></factory> </factories> </sitecore>
使用第二种方法,您可以像往常一样在构造函数中注入依赖项.
这些可能是最常用的两种选择.