1

クラスのコンストラクターが、インターフェイスを実装する同じ具象型の 2 つのインスタンスを必要とする状況があります。これは、「タスク」を使用してそれらを並行して実行し、時間を短縮できるようにするためです。

コンストラクターのコードは次のようになります。

public SomeUsingClass (ISomeDependency someDepOne, ISomeDependency someDepTwo) { }

ここでは、ISomeDependencyClass である ISomeDependency を実装する具象クラスが 1 つだけあります。

SomeUsingClass のインスタンスを取得したら、2 つの引数が SomeDependencyClass の別々のインスタンスを指していることを確認する必要があります。これは、インスタンスが 2 つの別個のタスクで使用される場合、それらの「状態」が他のタスクと競合してはならないためです。

ISomeDependency の名前付きインスタンスを使用してみました (「instanceOne」および「instanceTwo」と名付けました。コードは次のようになります。

.For<ISomeDependency>().Add<SomeDependency>().Named("instanceOne");
.For<ISomeDependency>().Add<SomeDependency>().Named("instanceTwo");

...そして、次を使用して、using クラスのインスタンスを作成しました。

.For<SomeUsingClass>().Use<SomeUsingClass>()
.Ctor<ISomeDependency>("someDepOne")
.IsNamedInstance("instanceOne")
.Ctor<ISomeDependency>("someDepTwo")
.IsNamedInstance("instanceTwo");

これにより、次のエラーが発生します。

既定のインスタンスは登録されておらず、タイプ 'ISomeDependency' に対して自動的に決定できません。

名前付きの特定のインスタンスを使用することを明示的に述べました。どこで私は間違えましたか?

4

1 に答える 1

0

必要なのは、登録時に次のように指定することだけですAlwaysUnique()

.For<ISomeDependency>().AlwaysUnique().Add<SomeDependency>().Named("instanceOne");
.For<ISomeDependency>().AlwaysUnique().Add<SomeDependency>().Named("instanceTwo");
于 2015-08-11T15:57:34.350 に答える