0

以下のコード サンプルを検討してください。

public interface IMyInterface
{
   void SetName(string name);
   string GetName();
}

public class MyInterfaceImplementor1 : IMyInterface
{
   protected string Name { set; get; }

   public void SetName(string name)
   {
      this.Name = name;
   }

   public virtual string GetName()
   {
      return this.Name;
   }
}

public class MyInterfaceImplementor2 : MyInterfaceImplementor1
{
   public override string GetName()
   {
      return String.Format("Hello! {0}", base.Name);
   }
}

このための DI 構成: ( StructureMapコード スニペットが提供されます)

ObjectFactory.Configure(x => 
{
   x.For<IMyInterface>()
    .Use<MyInterfaceImplementor1>();
});

ObjectFactory.Configure(x =>
{
   x.For<IMyInterface>()
    .Use<MyInterfaceImplementor2>();
});  

私のコードでは、ある時点でMyInterfaceImplementor1を使用し、別の時点でMyInterfaceImplementor2を使用しているとします。私の質問は、DI フレームワーク (StructureMap またはその他) が上記の構成をどのように解決するかということです。また、 MyInterfaceImplementor1 のインスタンスを返す場所と、 MyInterfaceImplementor2 のインスタンスをいつ返すかをどのように決定ます? または私はここで何か間違ったことをしていますか?

4

4 に答える 4

0

StructureMapを使用して同じインターフェースを異なるConcreteClassesにマップする方法は?

上記を見てください。ほとんどの DI フレームワークは、名前/属性の形式で提示されるヒントを使用して、実行時に適切な具象クラスを挿入します。

以下を見て、

StructureMap: ネストされた依存関係の具体的なタイプを選択する

于 2014-10-24T09:15:01.407 に答える
0

StructureMap は、複数の登録がある場合にどれが必要かを推測しようとしないため、例外が発生して爆発します。私は今日までその決定を支持しています. 他の IoC コンテナーの一部は、最初に登録されたコンテナーまたは最後に登録されたコンテナーのいずれかを使用します。

于 2015-02-23T18:33:53.487 に答える