Предположим, что у меня есть следующая служба и компоненты:
public interface IService
{
void DoWork();
}
public class ServiceA : IService
{
private readonly string _name;
public ServiceA(string name)
{
_name = name;
}
public void DoWork()
{
//ServiceA DoWork implementation
}
}
public class ServiceB : IService
{
private readonly string _name;
public ServiceB(string name)
{
_name = name;
}
public void DoWork()
{
//ServiceB DoWork implementation
}
}
Обратите внимание, что каждый компонент принимает параметр конструктора name
. Давайте также скажем, что name
определяется во время выполнения.
Я просматриваю документацию AutoFac, чтобы попытаться найти безопасный для типа способ решения таких компонентов, не связавшись напрямую с контейнером. Если бы у меня была только одна реализация IService
, тогда я мог бы просто использовать Delegate Factory, чтобы передать параметр runtime в конструктор. Тем не менее, у меня есть две реализации, и тот, который должен использоваться, также должен быть определен во время выполнения. Если у меня не было параметра конструктора name
, то я мог бы зарегистрировать два компонента по ключу и разрешить с помощью IIndex
Я не могу понять, как это сделать. Я могу каким-то образом объединить использование делегированных фабрик и IIndex
разрешения компонентов? Или есть другой способ зарегистрировать и разрешить оба компонента без прямой ссылки на контейнер?