J'ai une classe qui prend une interface en tant qu'argument de constructeur. Il y a deux implémentations de cette interface et je veux décider quelle implémentation utiliser lors de l'exécution en fonction d'une variable. Le problème est que la classe ci-dessus est profonde dans une hiérarchie d'objets qui est résolue par Autofac et donc je ne peux pas passer dans l'argument.Autofac - résoudre un composant avec des paramètres dynamiquement
Quelque chose comme ci-dessous est ce que j'essaie d'atteindre.
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>();
}
}
Des idées?
MISE À JOUR:
Pour clarifier les choses, ceci est une hiérarchie d'objets existant qui est utilisé par les applications existantes qui fonctionnent bien. En outre, le modèle d'objet est beaucoup plus grand que celui montré dans cet exemple. Par conséquent, je ne veux pas vraiment avoir à transmettre une usine à chaque constructeur dans le graphe d'objets pour être utilisé par une classe en profondeur dans ce graphe.
Existe-t-il un moyen de faire passer une implémentation différente de IInterface1 dans Class1 sans que Class2 ne sache quoi que ce soit?
Merci
Vous dites "il y a deux implémentations de cette interface .." mais votre exemple ne le montre pas très bien. Pourriez-vous élaborer, alors je mettrai à jour ma réponse en conséquence. –