Autofac - разрешение компонента с параметрами динамически

У меня есть класс, который принимает интерфейс в качестве аргумента конструктора. Существует две реализации этого интерфейса, и я хочу решить, какую реализацию использовать во время выполнения, основываясь на переменной.

Проблема в том, что вышеприведенный класс глубоко в иерархии объектов, которая разрешена 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>();
    }
}

Любой Идеи?

ОБНОВЛЕНИЕ:

Для пояснения, это существующая иерархия объектов, которая используется существующими приложениями, которые работают нормально. Кроме того, объектная модель намного больше, чем та, что показана в этом примере. В результате я действительно не хочу передавать фабрику каждому конструктору в графе объектов, который будет использоваться классом глубоко в этом графе. Я пытаюсь настроить стиль кода в CDT, поэтому он дает мне: MyClass :: MyClass (): var1 (1), var2 (2), var3 (3) {} вместо ...

Я пытался найти решение сейчас ~ 30 минут и не смог найти ни одного. Я пытаюсь настроить стиль кода в CDT, чтобы он выдавал мне:

MyClass::MyClass() :    
var1(1), 
var2(2), 
var3(3){

}

вместо

MyClass::MyClass() :    
var1(1), var2(2), var3(3){

}

, но я не смог найти вариант для этого.

Единственная опция «список инициализатора», которую я мог найти, это на самом деле для массивов и поэтому бесполезен для меня.

Мой вопрос: я пропустил правильное место? Есть ли плагин, который лучше форматирует код C ++, чем CDT?

10
задан Catskul 4 April 2011 в 17:29
поделиться