0

次のクラス構造がある場合:

public AContainer : IContainer
{
    public AContainer(ILogger log, IDataService dataService)

    ....         
}

public BContainer : IContainer
{
    public BContainer(ILogger log, IDataService dataService)

    ....         
}

public DataService : IDataService
{
    public DataService(ILogger log, ISomethingElse somethingElse, IWhatever whatever)

    ....
}

そして、AContainer のログを DataService に、BContainer のログを DataService に注入しながら、同じ DataService の 2 つの異なるインスタンスを登録したいと考えています。

ISomethingElse と IWhatever をコンテナーと共に登録する必要があるため、ResolvedParameter を使用して完全な構造を登録する方法が 1 つあります。

別のルートは、プロパティ インジェクションへと私を導きます。これは、一般的に推奨されませんが、ここでは場所があるかもしれません。

IoC でこの種の問題に共通するパターンはありますか? Unity でサポートされていますか?

4

1 に答える 1

1

多分UnityPerResolveLifetimeManagerがあなたを助けることができます. PerResolveLifetimeManagerインジェクション チェーンごとにインスタンスのみが作成されるように ILogger が構成されている場合。

この Life-Time Manager を使用すると、 Unity はが解決されLoggerたときに新しい を作成しDataService(およびが解決されたときにDataServiceに注入されるように解決されます)、 で作成されたものと同じものを に注入します。AContainerAContainerLoggerAContainer

を解決すると、新しいとDataService新しいLoggerが作成されますBContainer。この newloggerは、 this newDataServiceおよび in に挿入されBContainerます。DataServiceに注入されBContainerます。

結果は次のようになります。

2 つの異なるContainers:AContainerBContainer. 2 種類DataServices: 各コンテナに 1 つずつ。2 (not 4) Loggers:AContainerロガーをそのロガーと共有し、他のロガーをそのロガーDataServiceBContainer共有loggerしましたDataService

于 2013-03-04T14:07:15.333 に答える