Ho pensato un po 'su come l'iniezione di dipendenza potesse essere meglio integrata direttamente in un linguaggio simile a C #. Ho trovato una potenziale soluzione su cui vorrei sentire la tua opinione. Non ho usato molti framework di iniezione di dipendenza, quindi potrebbe esserci qualcosa che sto trascurando
Ad ogni modo, l'idea è quella di poter dichiarare le proprietà "iniettabili" usando una parola chiave. Quando un oggetto viene istanziato e quella proprietà non è inizializzata tramite il costruttore o l'inizializzatore di oggetti, richiede un'istanza di quel tipo di proprietà da un servizio globale.
Allo stesso modo si registrano gestori per tipi diversi a quel servizio in modo da poter istanziare il tipo di proprietà iniettato.
L'aspetto positivo dell'utilizzo di questo tipo di architettura IMO è che è abbastanza flessibile e facile da usare. Il rovescio della medaglia è che potrebbe esserci un certo sovraccarico nel fare il richiamo al singleton ogni volta che si avvia una classe che ha l'iniezione.
Inoltre, questo è solo un problema per le classi che vengono istanziate frequentemente in una soluzione ad alte prestazioni, quindi non dovrebbe essere un grosso problema. Forse potresti usare una specie di fabbrica in quei casi.
Pensiero, problemi, domande, idee migliori?
Codice
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));