Mi sto bagnando i piedi con DI/IoC e MEF in particolare.MEF e l'interfaccia separata portano a "Interfaccia per ogni classe"
Possiedo un'applicazione Web con due tipi di parti (forse più un giorno) definite da interfacce che richiedono l'accesso all'intero ambiente. L'applicazione ha una lista con implementazioni concrete per ogni tipo, composta da MEF.
L'ambiente è costituito da:
- diversi repository
- attuale richiesta di applicazione
- motore di rendering
- motore di navigazione
- più alcune classi di utilità statici
Come posso metti la definizione di interfaccia s in un assemblaggio separato e allo stesso tempo specificare l'iniezione di ambiente?
Ovviamente, non posso semplicemente fare riferimento all'assembly principale perché è necessario fare riferimento all'assembly del contratto e non riesco a creare un riferimento circolare.
Sembra che sia necessario creare un'interfaccia per ciascuna classe dell'ambiente, i relativi tipi disponibili pubblicamente e così via ... Deve esserci un modo migliore ?!
Forse mi manca anche l'evidente difetto più grande qui, se qualcuno potesse indicarlo per me?
"Impossibile fare riferimento alla composizione radice dalla libreria di astrazione" - Questo è l'obiettivo, ma anche la fonte della mia confusione. Se le mie astrazioni hanno una proprietà di tipo "Engine", che è definita e implementata nella mia libreria di implementazione, devo creare un'interfaccia "IEngine" anche per questo tipo nella libreria di astrazione? Ora, se devo fare riferimento a più tipi, ognuno di nuovo con le proprie dipendenze, avrei bisogno di astrarre tutti quelli nella libreria di astrazione, non è vero? – wagi
Sì, è corretto. Tutte queste interfacce aggiuntive possono sembrare un po 'eccessive, ma ognuna è in realtà una ** Seam ** in cui si disaccoppia l'implementatore dal consumatore. Il risultato finale è un sistema più flessibile. Il vantaggio potrebbe non essere immediatamente ovvio, ma una volta che inizi a sperimentare il potere di consumare ed esporre astrazioni invece di tipi concreti, non vorrai più tornare :) –
grazie, quindi quello che pensavo fosse troppo, in realtà è perfettamente a posto e necessario! – wagi