Múltiples implementaciones para una interfaz con DI

Ahora mismo estoy tratando de enseñarme el patrón de inyección de dependencia con el contenedor IOC de Autofac. He venido con un ejemplo muy simple, que se presenta a continuación. Aunque el ejemplo es simple, no logro que funcione correctamente.

Aquí están mis clases / interfaces:

Dos monstruos, ambos implementando la interfaz 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!");
  }
}

Luego está mi cementerio:

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();
  }
}

Y finalmente mi principal:

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();
}

Y este es mi problema: durante el tiempo de ejecución, Autofac lanza una excepción en esta línea:

var vampire = mVampireFactory.Invoke(300);

Parece que el mVampireFactory está tratando de crear una instancia de un zombie. Por supuesto, esto no funcionará ya que el constructor del zombie no tomará un int.

¿Hay una manera sencilla de solucionar esto? ¿O me di cuenta de que Autofac funciona completamente mal? Como resolverías este problema?

Respuestas a la pregunta(1)

Su respuesta a la pregunta