Sitecore:将依赖注入sitecore组件

时间:2016-06-30 20:54:01

标签: dependency-injection sitecore

我使用Sitecore 8.1 MVC和Autofac作为DI。我想知道将已解析的对象注入sitecore创建的对象的推荐方法是什么,例如管道,命令,计算字段等......例如,我使用的是成员资格提供程序,我需要调用我的业务层。我可以在类上定义构造函数,sitecore会注入对象吗?

由于

1 个答案:

答案 0 :(得分:3)

使用管道处理器,命令等...基本上任何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>

使用第二种方法,您可以像往常一样在构造函数中注入依赖项。

这些可能是最常用的两种选择。