Wiele implementacji dla jednego interfejsu z DI

W tej chwili próbuję nauczyć się wzoru wtrysku zależności od kontenera IOC firmy Autofac. Wymyśliłem bardzo prosty przykład, który przedstawiono poniżej. Chociaż przykład jest prosty, nie udaje mi się go poprawnie uruchomić.

Oto moje klasy / interfejsy:

Dwa potwory, oba implementujące interfejs 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!");
  }
}

Potem jest mój cmentarz:

interface ILocation
{
  void PresentLocalCreeps();
}

class Graveyard : ILocation
{
  Func<int, IMonster>    mVampireFactory;
  Func<string, IMonster> mZombieFactory;

  public Graveyard(Func<int, IMonster> vampireFactory, Func<string, IMonster> zombieFactory)
  {
    mVampireFactory = vampireFactory;
    mZombieFactory  = zombieFactory;
  }

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

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

I wreszcie moja główna:

static void Main(string[] args)
{
  // Setup Autofac
  var builder = new ContainerBuilder();
  builder.RegisterType<Graveyard>().As<ILocation>();
  builder.RegisterType<Vampire>().As<IMonster>();
  builder.RegisterType<Zombie>().As<IMonster>();
  var container = builder.Build();

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

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

I to jest mój problem: podczas wykonywania Autofac zgłasza wyjątek w tej linii:

var vampire = mVampireFactory.Invoke(300);

Wygląda na to, że mVampireFactory rzeczywiście próbuje utworzyć instancję zombie. Oczywiście to nie zadziała, ponieważ konstruktor zombie nie przyjmie int.

Czy istnieje prosty sposób, aby to naprawić? A może zrozumiałem, że Autofac działa całkowicie źle? Jak rozwiązać ten problem?

questionAnswers(1)

yourAnswerToTheQuestion