Ключевые фабрики делегатов с параметрами конструктора во время выполнения?
Допустим, у меня есть следующие сервис и компоненты:
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
тогда я мог бы просто использоватьФабрика делегатов передать параметр времени выполнения конструктору. Тем не менее, у меня есть две реализации, и та, которая должна использоваться, также должна быть определена во время выполнения. Если бы у меня не былоname
параметр конструктора, то я могзарегистрировать два компонента по ключу и разрешить с помощью IIndex
Я не могу понять, как сделать оба. Есть ли способ, которым я могу каким-то образом объединить использование делегатских фабрик иIIndex
разрешение компонента? Или есть другой способ регистрации и разрешения обоих компонентов без прямой ссылки на контейнер?