我对实现相同接口和依赖注入的 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;
}
}
我看到网上的例子说这是有效的,但你一次只能使用一个类。因此,如果应用程序在 SiteA 运行,您告诉 IOC 使用 SomethingA,但如果它在 SiteB 运行,您告诉它使用 SomethingAB。
因此,拥有一个具有 2 个实现 1 个接口的类的应用程序并尝试使用这两个类是否被认为是不好的做法?如果不是,您如何告诉国际奥委会在相关情况下使用哪个类?
更新:为了更好地解释它,我将使用 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
}
}
所以现在你有 2 个使用 IWeapon 的类。根据您的应用程序中的某些内容或上下文,您希望武士有时拥有一把剑或在其他地方拥有一把枪。你如何做到这一点?你如何处理那种“如果”的情况?