同じインターフェースと依存性注入を実装する2つのクラスのシナリオと混同しています。
public interface ISomething
{
void DoSomething();
}
public class SomethingA : ISomething
{
public void DoSomething()
{
}
}
public class SomethingAB : ISomething
{
public void DoSomething()
{
}
}
public class Different
{
private ISomething ThisSomething;
public Different(ISomething Something)
{
ThisSomething = Something;
}
}
オンラインの例では、これは有効であると言われていますが、一度に使用できるクラスは1つだけです。したがって、アプリがSiteAで実行されている場合は、IOCにSomethingAを使用するように指示しますが、SiteBで実行されている場合は、SomethingABを使用するように指示します。
したがって、1つのインターフェイスを実装する2つのクラスを持つ1つのアプリを作成し、両方のクラスを使用しようとするのは悪い習慣と見なされますか?そうでない場合、関連する状況でどのクラスを使用するかをIOCにどのように伝えますか?
更新:それをよりよく説明するために、Ninjectの例を使用します:
public class Samurai
{
private IWeapon Weapon;
public Samurai(IWeapon weapon)
{
this.Weapon = weapon;
}
}
public class Sword : IWeapon
{
...
}
public class Gun : IWeapon
{
...
}
public class WarriorModule : NinjectModule
{
public override void Load()
{
this.Bind<IWeapon>().To<Sword>();
this.Bind<IWeapon>().To<Gun>(); //Just an example
}
}
これで、IWeaponを使用する2つのクラスができました。アプリ内の何かやコンテキストに応じて、サムライに時々剣を持たせたり、他の場所に銃を持たせたりします。どうやってこれを実現しますか?その「if」シナリオをどのように処理しますか?