依存注入
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
依存注入(DI)は、オブジェクトとそのコラボレータ、すなわち依存関係との間に緩やかな結合を実現する技術です。ココラボレーターを直接インスタンス化したり、静的参照を用いたりするのではなく、クラスがアクションを実行するために必要なオブジェクトを何らかの形でクラスに提供します。多くの場合、クラスはコンストラクタを通じて依存関係を宣言します。Sitecoreはこのアプローチのみをサポートしており、これをコンストラクタ注入として知られています。
SitecoreにおけるDI実装は、Microsoft.を基にしています 。拡張。依存注入ASP.NET Coreからの抽象化。
サービス登録
抽象化は設定上かコードで登録できます。
構成上の登録
Sitecoreのインクルード設定ファイル内のサービスノードで抽象化を設定できます。例えば:
コードでの登録
IServicesConfiguratorインターフェースを使ってコードからサービスを設定します。例えば:
-
IServicesConfiguratorインターフェースの実装:
public class MyServicesConfigurator : IServicesConfigurator { public void Configure(IServiceCollection serviceCollection) { serviceCollection.AddScoped(typeof(IMyService), typeof(MyServiceImplementation)); serviceCollection.AddTransient(typeof(MyServiceBase), typeof(MyServiceBaseImplementation)); } }
IServiceServiceCollectionの詳細はMSDNのウェブサイトでご覧いただけます。
-
コンフィギュレーターを登録する:
サービス期間
MSDNのウェブサイトで、サービス期間および登録オプションに関する重要な情報をお読みください。
リクエストライフタイムごとのスコープドをサポートするために、httpモジュールにSitecore.DependencyInjection.SitecorePerRequestScopeModule, Sitecore.Kernelが追加されました。モジュールが無効化されている場合、Scopedはシングルトンと同じ動作を示します。
サービス解決
このセクションでは、サービスロケーターを使ってDIを通じて登録サービスを解決(検索)する方法について説明します。
Factoryによって作成された型への注入
resolve属性を使用する必要があります。以下の変更により、shutdownパイプラインのShowReasonプロセッサへの注入が可能になります。
注入とMVC
デフォルトでは、Sitecore MVCは依存性注入のSitecore実装を使用しています。現在のトピックで説明されているようにコントローラとその依存関係を設定し、両方をレジスタすることを忘れないでください。
WebFormsおよびUserControlsへの注入
フォームとユーザーコントロールにはSitecore.DependencyInjection.AllowDependencyInjection属性を使いましょう:
Sitecore.DependencyInjection.AllowDependencyInjection public partial class Default : System.Web.UI.Page { protected Default() // important { } public Default(IMyService myService, MyServiceBase serviceBase) { … } }
フォームにはデフォルトのコンストラクタも必要です(これはASP.NETの制限です)。
サービスロケーター
現在、Sitecoreのすべての部分で依存注入を使うことは不可能なので、サービスロケーターが唯一の解決策となる場合もあります。例えば、ページハンドラーファクトリー、MVCコントローラーファクトリー、そして後方互換性のためのスタティックマネージャーで見られます。
したがって、Sitecore.DependencyInjection.ServiceLocatorクラスを使用できます。例えば:
var service = ServiceLocator.ServiceProvider.GetService(typeof(IMyService))
例えば:
var service = ServiceLocator.ServiceProvider.GetService
依存注入構成を見る
依存注入の詳細はこのURLで確認できます:http://instance/sitecore/admin/showservicesconfig.aspx。
設定されたサービス(ノードサービス)は以下のURLで確認できます:http://instance/sitecore/admin/showconfig.aspx。