Je suis relativement nouveau dans l'injection de dépendance, donc je suis probablement en train de dépeindre le concept dans une certaine mesure. Cependant, j'essaie de réaliser quelque chose comme ce qui suit, mais je ne sais pas si c'est faisable:Injection de dépendances réflexives .NET avec plusieurs conteneurs
Disons que j'ai deux conteneurs, chacun contenant différentes instances du même type de dépendance. Par exemple, chaque contient unique instance de MyApplicationContext
et MyRequestContext
.
Dites maintenant que j'ai plusieurs classes qui dépendent d'une (ou des deux) de ces instances. Ils ne devraient pas se préoccuper de savoir lequel des deux conteneurs ils utilisent; ils ont simplement besoin d'une instance de la dépendance pour faire le travail.
Dans un monde idéal, chacune de ces classes fiables fait un appel statique dans son constructeur, qui à son tour injecte les dépendances pensivement de un récipient approprié ...
public class MyDependableClass{
protected MyApplicationContext Application {get; set;}
protected MyRequestContext Request {get; set;}
public MyDependableClass() {
Dependencies.Inject(this);
}
}
Cependant, il n'y a pas autant que je sache façon pratique de déterminer un conteneur approprié. J'ai envisagé d'enregistrer chaque objet sur un conteneur particulier (par exemple container.Register(obj);
), mais cela serait laborieux et ne fonctionnerait pas si des dépendances étaient requises dans le constructeur. Vous pouvez également analyser la pile d'appels pour déduire le conteneur d'un objet de niveau supérieur enregistré ... ne fonctionnerait pas pour les appels asynchrones, etc.
Des idées?
Exemple: Je peux avoir plusieurs classes qui peuvent dépendre d'une instance d'un proxy; appelons-le ILogicProxy
. Ce proxy peut renvoyer les appels à la logique locale ou distante sur une autre machine. De plus, l'application peut établir des connexions avec plusieurs machines distantes. Donc ... nous avons potentiellement plusieurs instances ILogicProxy
qui doivent être injectées dans plusieurs classes ... mais laquelle va où? Une solution comme celle-ci pourrait simplement utiliser une simple 'injection de propriété de setter', mais elle ne sera pas mise à l'échelle lorsque plus de dépendances sont nécessaires, car cela rendrait le processus de 'câblage' plus salissant/bavard.
Pouvez-vous mettre à jour votre question pour expliquer pourquoi vous pensez avoir besoin de deux conteneurs. Expliquez ce que vous essayez d'accomplir. Cela nous aide à comprendre le contexte et, espérons-le, vous aidera davantage. – Steven
Merci Steven, j'ai ajouté un exemple. – Lawrence
quel conteneur utilisez-vous? –