Несколько реализаций для одного интерфейса с DI

Прямо сейчас яЯ пытаюсь научить себя шаблону внедрения зависимостей с помощью IOC-контейнера от Autofac. Я'Мы придумали очень простой пример, который представлен ниже. Хотя пример прост, я не могу заставить его работать должным образом.

Вот мои классы / интерфейсы:

Два монстра, оба реализуют интерфейс IMonster:

interface IMonster
{
  void IntroduceYourself();
}

class Vampire : IMonster
{
  public delegate Vampire Factory(int age);

  int mAge; 

  public Vampire(int age)
  {
    mAge = age;
  }

  public void IntroduceYourself()
  {
    Console.WriteLine("Hi, I'm a " + mAge + " years old vampire!");
  }
}

class Zombie : IMonster
{
  public delegate Zombie Factory(string name);

  string mName;

  public Zombie(string name)
  {
    mName = name;
  }

  public void IntroduceYourself()
  {
    Console.WriteLine("Hi, I'm " + mName + " the zombie!");
  }
}

То есть'Мое кладбище:

interface ILocation
{
  void PresentLocalCreeps();
}

class Graveyard : ILocation
{
  Func    mVampireFactory;
  Func mZombieFactory;

  public Graveyard(Func vampireFactory, Func zombieFactory)
  {
    mVampireFactory = vampireFactory;
    mZombieFactory  = zombieFactory;
  }

  public void PresentLocalCreeps()
  {
    var vampire = mVampireFactory.Invoke(300);
    vampire.IntroduceYourself();

    var zombie = mZombieFactory.Invoke("Rob");
    zombie.IntroduceYourself();
  }
}

И напоследок мой главный:

static void Main(string[] args)
{
  // Setup Autofac
  var builder = new ContainerBuilder();
  builder.RegisterType().As();
  builder.RegisterType().As();
  builder.RegisterType().As();
  var container = builder.Build();

  // It's midnight!
  var location = container.Resolve();
  location.PresentLocalCreeps();

  // Waiting for dawn to break...
  Console.ReadLine(); 
  container.Dispose();
}

И это моя проблема: во время выполнения Autofac выдает исключение в этой строке:

var vampire = mVampireFactory.Invoke(300);

Кажется, что mVampireFactory на самом деле пытается создать зомби. Конечно это победилоне работает с зомбиконструктор выигралвзять инт.

Есть ли простой способ это исправить? Или я понял, что Autofac работает совершенно неправильно? Как бы вы решили эту проблему?

Ответы на вопрос(1)

Ваш ответ на вопрос