J'ai réfléchi un peu à la façon dont l'injection de dépendances pourrait être mieux intégrée directement dans un langage de type C #. J'ai trouvé une solution potentielle sur laquelle j'aimerais avoir votre avis. Je n'ai pas utilisé beaucoup de frameworks d'injection de dépendances donc il y a peut-être quelque chose que je néglige
Quoi qu'il en soit, l'idée est de pouvoir déclarer des propriétés "injectables" à l'aide d'un mot-clé. Lorsqu'un objet est instancié et que cette propriété n'est pas initialisée via le constructeur ou l'initialiseur d'objet, il demande une instance de ce type de propriété à un service global.
De même, vous enregistrez des gestionnaires pour différents types dans ce service afin de pouvoir instancier le type de propriété injecté.
L'avantage d'utiliser ce type d'architecture IMO est qu'il est assez flexible et facile à utiliser. L'inconvénient est qu'il peut y avoir un surcoût pour faire la légende au singleton chaque fois que vous lancez une classe qui a une injection.
Là encore, ce n'est qu'un problème pour les classes qui sont instanciées fréquemment dans une solution haute performance, donc cela ne devrait pas être un problème majeur. Vous pourriez peut-être utiliser une sorte d'usine dans ces cas.
Pensée, enjeux, questions, meilleures idées?
Code
public class SomeClass
{
public SomeClass()
{
//implicit behavior if Animal is not set in constructor or initializer
this.Animal = GlobalInjector.Get(this,typeof(Mammal))
}
public injectable Mammal Animal
{
get;
set;
}
}
GlobalInjector.Register(typeof(Mammal), () => return new Mammal(someParameter));