...サイトコアは作成何も - あなたはかなり限られています。通常の方法は、サービスロケータパターンを使用して依存関係を解決することです。
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>
この2番目の方法では、通常どおりに依存関係をコンストラクタに挿入できます。
これはおそらく2つの最も一般的なオプションです。
サービスロケータとキャプティブの依存関係に注意してください。あなたは 'try/finally'の中でリリースをしたいでしょう –