Я очень новичок в autofac, поэтому возможно, что я полностью злоупотребляю им.
Скажем, у меня есть класс, который имеет такую структуру:
public class HelperClass : IHelperClass
{
public HelperClass(string a, string b)
{
this.A = a;
this.B = b;
}
}
и у меня есть два класса, которые используют этот класс, но для разных конструкторов требуются разные значения по умолчанию. Второй конструктор JUST предназначен для тестирования - мы всегда хотим использовать 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();
}
}
Мой вопрос (ы):
- Когда я вызываю решение на DoesSomething или DoesSomethignElse - он разрешит внутренний конструктор вместо публичного? Мне нужно оставить IHelperClass незарегистрированным?
- Если да, то каким образом я могу передать ему разные параметры для каждого экземпляра IHelperClass в зависимости от того, используется ли он в DoSomething или DoesSomethingElse?