La mia applicazione include un numero di assembly back-end (incluso un layer di repository di dati Entity Framework) condivisi da un numero di assembly front-end (incluso un servizio Windows e un'applicazione web MVC3).Dove trovare i moduli Ninject in un'applicazione multilivello
La mia comprensione del processo di associazione di Ninject è che ogni assembly che contiene tipi iniettabili dovrebbe contenere anche un modulo Ninject che definisce i collegamenti predefiniti per questi tipi. Il set di moduli definiti verrebbe quindi caricato nel kernel Ninject degli assembly consumanti.
Tuttavia, si verificano problemi, poiché l'ambito di bind richiesto non è sempre coerente. Ad esempio, il mio progetto MVC deve collegarsi al contesto dati InRequestScope
, mentre il servizio Windows si lega alla stessa classe InThreadScope
.
Ovviamente posso risolvere questo problema riposizionando tutti i moduli nei progetti front-end e quindi mantenendo copie separate di ogni modulo per ogni scenario di utilizzo, ma questo sembra un hacker, poiché duplica gran parte del contenuto del modulo su più progetti .
Esiste una best practice su dove i moduli devono essere collocati in un'applicazione multilivello e come posso conciliare questo con il mio bisogno di legare le differenze tra i progetti?
Molte grazie per i vostri suggerimenti,
Tim
vedere anche http://stackoverflow.com/questions/1699197/how-do-you-organise-your-ninject-modules (IIRC questo Q è un dup ma questo è il migliore che ho per ora) –
Grazie Ruben. Hai ragione che c'è molto in comune tra queste due domande. Mi piace in particolare il tuo suggerimento di passare i parametri di runtime in moduli che risiedono negli assembly di supporto - molto flessibile. –
Hmm; è passato un po 'di tempo (non cercava di pubblicizzare la mia risposta in alcun modo). Potrei aver letteralmente voluto dire * passare i parametri * nel corso della giornata - in generale avrei cercato di farlo attraverso le interfacce il più possibile. Inoltre, questo era prima di http://manning.com/seemann, che riduce drasticamente il numero di domande che trovi sconcertante nell'architettura di DI: def run compralo senza fare domande. –