Ho deciso di utilizzare i principi IoC su un progetto più grande. Tuttavia, mi piacerebbe ottenere qualcosa di dritto che mi dava fastidio da molto tempo. La conclusione che ho trovato è che un contenitore IoC è un modello architettonico, non un modello di progettazione. In altre parole, nessuna classe dovrebbe essere consapevole della sua presenza e il contenitore stesso dovrebbe essere usato a livello di applicazione per ricucire tutti i componenti. Essenzialmente, diventa un'opzione, oltre a un modello orientato agli oggetti ben progettato. Detto questo, come è possibile accedere a tipi risolti senza sprecare contenitori IoC ovunque (indipendentemente dal fatto che siano astratti o meno)? L'unica opzione che vedo qui è quella di utilizzare fabbriche astratte che usano un contenitore IoC per risolvere tipi concreti. Questo dovrebbe essere abbastanza facile da sostituire per una serie di fabbriche standard. è un buon approccio? Qualcuno qui ha usato e quanto bene ha funzionato per te? C'è qualcos'altro disponibile?Modello di fabbrica astratto in cima a IoC?
Grazie!
Penso di esserci quasi. Resta con me qui :) Diciamo solo che ho un'interfaccia IFruit che è implementata dalla classe Apple. Dopo aver registrato questo tipo concreto, voglio usarlo nel mio evento click sui pulsanti in un Windows Form. Come potrei arrivare in classe Apple senza accedere esplicitamente al contenitore IoC dall'evento button? –
Dipende da: ci sono molte istanze di IFruit nella tua app o solo una? Se ce n'è solo uno, dovrebbe già essere iniettato nella classe con il gestore di clic del pulsante. Se ce ne sono molti, è molto probabile che sia necessario un IFruitFactory in grado di creare un'istanza di IFruit da altri valori di runtime. In quest'ultimo caso, IFruitFactory sarebbe la dipendenza iniettata. –
Considerando che esiste solo un'istanza di IFruit, l'unico modo in cui vedo che viene iniettato nella classe Form con l'evento click del pulsante è se cambio il costruttore di moduli per includere l'interfaccia di IFruit e quindi registro il modulo stesso con il contenitore IoC per eseguire il costruttore iniezione. Questo suono è corretto? Grazie per l'aiuto! –