Ho riflettuto un po 'su come l'integrazione delle dipendenze potrebbe essere meglio integrata direttamente in un linguaggio C #. Ho trovato una soluzione potenziale su cui vorrei sentire la tua opinione. Non ho usato molti framework per le dipendenze, quindi potrebbe esserci qualcosa che trascuro
Comunque, l'idea è di poter dichiarare le proprietà come "iniettabili" usando una parola chiave. Quando un oggetto viene istanziato e tale proprietà non viene inizializzata tramite il costruttore o l'inizializzatore dell'oggetto, richiede un'istanza di quel tipo di proprietà da qualche servizio globale.
Allo stesso modo registri i gestori per diversi tipi di 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 sovraccarico nel fare il richiamo al singleton ogni volta che si avvia una classe che ha un'iniezione.
Quindi di nuovo questo è solo un problema per le classi che vengono istanziate di frequente 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));