IOC/DI с двумя классами, реализующими один и тот же интерфейс

Я запутался со сценарием двух классов, реализующих один и тот же интерфейс и внедрение зависимостей.

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. В зависимости от чего-то или контекста в вашем приложении вы хотите, чтобы у самурая был меч иногда или пистолет в других точках. Как это сделать? Как вы справляетесь с этим сценарием «если»??

10
задан Jon 4 July 2012 в 19:21
поделиться