У меня есть класс, который принимает интерфейс в качестве аргумента конструктора. Существует две реализации этого интерфейса, и я хочу решить, какую реализацию использовать во время выполнения, основываясь на переменной.
Проблема в том, что приведенный выше класс глубоко в иерархии объектов, которая разрешена Autofac, и поэтому я не могу передать аргумент.
Я пытаюсь достичь чего-то похожего ниже.
public interface IInterface1 {}
public interface IInterface2 {}
public class Class1 : IInterface2
{
public Class1(IInterface1 interface1)
{
}
}
public class Class2
{
public Class2(IInterface2 interface2)
{
}
}
public class Class3
{
public void GetClass2Instance(string interface1ImplementationToChoose)
{
// want to change which implementation of IInterface1 is resolved based on the interface1ImplementationToChoose variable
var class2 = container.Resolve<Class2>();
}
}
Есть идеи?
UPDATE:
Для пояснения, это существующая иерархия объектов, которая используется существующими приложениями, которые работают нормально. Кроме того, объектная модель намного больше, чем та, что показана в этом примере. В результате я не хочу передавать фабрику каждому конструктору в графе объектов, который будет использоваться классом в этом графе.
Есть ли способ заставить другую реализацию IInterface1 быть переданной в Class1, если Class2 ничего не знает об этом?
Спасибо