Передача параметров в конструкторы с помощью Autofac

Я очень новичок в autofac, поэтому возможно, что я использую его совершенно неправильно.

Допустим, у меня есть класс, который имеет такую структуру:

public class HelperClass : IHelperClass
{
     public HelperClass(string a, string b)
     {
         this.A = a;
         this.B = b;
     }
}

и у меня есть два класса, которые используют этот класс, но требуют разных значений по умолчанию для конструктора. Второй конструктор нужен только для тестирования - в "реальном" приложении нам всегда будет нужен HelperClass:

public class DoesSomething: IDoesSomething
{
     public DoesSomething()
         : this(new HelperClass("do", "something"));
     {

     }

     internal DoesSomething(IHelperClass helper)
     {
          this.Helper = helper;
     }
}

public class DoesSomethingElse : IDoesSomethingElse
{
     public DoesSomethingElse()
         : this(new HelperClass("does", "somethingelse"));
     {

     }

     internal DoesSomethingElse(IHelperClass helper)
     {
          this.Helper = helper;
     }
}

Вот мой модуль AutoFac:

public class SomethingModule: Module
{
    protected override void Load(ContainerBuilder builder)
    {
         builder.RegisterType<DoesSomething>().As<IDoesSomething>();
         builder.RegisterType<DoesSomethingElse>().As<IDoesSomethingElse();
    }
}

Мой вопрос(и):

  1. Когда я вызываю resolve на DoesSomething или DoesSomethignElse - будет ли он разрешать внутренний конструктор вместо публичного? Нужно ли мне оставить IHelperClass незарегистрированным?
  2. Если да, то как мне сделать так, чтобы он передавал разные параметры каждому экземпляру IHelperClass в зависимости от того, используется ли он в DoesSomething или DoesSomethingElse?
40
задан Paul 30 January 2012 в 16:04
поделиться