1. その他の開発タスク

依存関係の挿入

Version:
日本語翻訳に関する免責事項

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

依存性注入(DI)は、オブジェクトとそのコラボレーター、つまり依存関係との間の疎結合を実現するための手法です。コラボレーターを直接インスタンス化したり、静的参照を使用したりするのではなく、クラスがアクションを実行するために必要なオブジェクトは、何らかの方法でクラスに提供されます。ほとんどの場合、クラスはコンストラクタを通じて依存関係を宣言します。Sitecoreは、コンストラクター インジェクションと呼ばれるこのアプローチのみをサポートします。

DIのSitecore実装は、ASP.NET CoreのMicrosoft.Extensions.DependencyInjection抽象化に基づいています。

サービス登録

抽象化は、構成またはコードで登録できます。

構成への登録

抽象化は、任意のSitecoreインクルード設定ファイルの サービス ノードで設定できます。例えば:

<configuration>
    <sitecore>
        <services>
            <register serviceType="IMyService, MyAbstraction.Assembly" implementationType="MyServiceImplementation, MyImplementation.Assembly" />
            <register serviceType="MyServiceBase, MyAbstraction.Assembly" implementationType="MyServiceBaseImplementation, MyImplementation.Assembly" />
        </services>
    </sitecore>
</configuration>

コードでの登録

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 Webサイトを参照してください。

  • コンフィギュレーターを登録します。

    <configuration>
        <sitecore>
            <services>
                <configurator type= "MyServicesConfigurator, MyAssembly"/>
            </services>
        </sitecore>
    </configuration>

サービスの有効期間

MSDN Webサイトでは、 サービスの有効期間と登録オプション に関する重要な情報を参照してください。

要求ごとのスコープの有効期間をサポートするために、Sitecore.DependencyInjection.SitecorePerRequestScopeModule, Sitecore.Kernelがhttpモジュールに追加されました。モジュールが無効になっている場合、ScopedSingletonと同じ動作をします。

サービスの解決

このセクションでは、サービス ロケーターを使用して、DIで登録済みサービスを解決 (検索) する方法について説明します。

Factoryによって作成された型へのインジェクション

resolve属性を使用する必要があります。次の変更により、shutdownパイプラインのShowReasonプロセッサの挿入が有効になります。

<shutdown>
     <processor type="Sitecore.Pipelines.Shutdown.ShowReason, Sitecore.Kernel" resolve="true"/> </shutdown>

インジェクションとMVC

デフォルトでは、Sitecore MVCは依存関係の挿入のSitecore実装を使用します。現在のトピックで説明されているようにコントローラーとその依存関係を構成し、両方を登録することを忘れないでください。

WebFormsとUserControlsへのインジェクション

FormsとUserControlsにはSitecore.DependencyInjection.AllowDependencyInjection属性を使用します。

[Sitecore.DependencyInjection.AllowDependencyInjection] 
public partial class Default : System.Web.UI.Page 
{
    protected Default() // important 
    { 
    }
    public Default(IMyService myService, MyServiceBase serviceBase) 
    { 
         
    } 
} 

Formには、デフォルトのコンストラクタも必要です (これはASP.NETの制限です)。

サービスロケーター

現在、Sitecoreのすべての部分で依存関係の挿入を使用することはできませんため、サービス ロケーターが唯一の解決策である場合があります。これは、たとえば、ページハンドラファクトリ、MVCコントローラファクトリ、および下位互換性のための静的マネージャの場合です。

したがって、Sitecore.DependencyInjection.ServiceLocatorクラスを使用できます。例えば:

var service = ServiceLocator.ServiceProvider.GetService(typeof(IMyService))

または、たとえば:

var service = ServiceLocator.ServiceProvider.GetService<MyServiceBase>();

依存関係の挿入構成を表示する

依存関係の挿入の詳細については、次のURLで確認できます: http://instance/sitecore/admin/showservicesconfig.aspx

設定済みサービス (ノード サービス) は、次のURLで確認できます: http://instance/sitecore/admin/showconfig.aspx

この記事を改善するための提案がある場合は、 お知らせください!