2011-12-15 19 views
7

Ho letto un paio di cose in giro su questo sito:Dove devo definire il mio NinjectModule e le mie fabbriche?

  • E 'meglio configurare il nostro contenitore in occasione del lancio l'applicazione
  • E' meglio evitare di fare le nostre librerie dipendenti su un quadro di iniezione di dipendenza
  • Si consiglia di utilizzare le fabbriche per inizializzare gli oggetti le cui proprietà sono definite al runtime

Io uso Ninject. Se ho ben capito queste raccomandazioni, è necessario che:

  • mie librerie non utilizzare NInject.dll
  • Pertanto, i miei NinjectModules deve essere definito nel progetto della mia applicazione
  • mie fabbriche (which are created on this principle) devono anche essere definito nel progetto della mia applicazione, e non direttamente nella libreria

Questo sembra strano, soprattutto per le fabbriche. Ho molti progetti che usano la stessa libreria. Tutti questi progetti dovrebbero ridefinire moduli e fabbriche?

Cosa ne pensi?

+0

possibile duplicato di [Posizione migliore per la configurazione IOC fluente (Attualmente si sta provando con Ninject)] (http://stackoverflow.com/questions/5733591/best-location-for-fluent-ioc-configuration-currently-trying-ninject) –

risposta

1

La configurazione non è necessariamente nell'assembly dell'applicazione. Può anche essere in diversi assembly dedicati contenenti nient'altro che una parte della configurazione. Ma come hai detto, non dovrebbe essere parte dell'implementazione. Se condividi esattamente la stessa configurazione su più progetti, puoi fare riferimento a uno esistente.

Per gli stabilimenti è possibile utilizzare Ninject.Extensions.Factory in futuro in modo da non doverli implementare da soli.

+0

@Filimindji Vedi anche [questa risposta di Remo nella domanda che ho suggerito come duplicato] (http://stackoverflow.com/a/5746602/11635) –

+0

Mi piace l'idea di utilizzare diversi assembly dedicati per la configurazione. – Filimindji

+0

Come si usa Ninject.Extensions.Factory? – Filimindji

1

Questo dipende molto dal contesto delle librerie, come lo faccio è:

  • Inizializzare tutto in un programma di avvio automatico nel progetto principale. Sebbene disponga di diversi livelli di bootstrap in cui configuro cose diverse (principalmente perché utilizzo le mie librerie nello stesso tipo di progetti, quindi hanno una configurazione simile)

  • Per mantenere questo estratto dal framework Ioc, utilizzo lo ServiceLocator pattern che potresti usare nelle tue fabbriche.

+0

Ho letto che l'utilizzo di ServiceLocator è in realtà un anti-pattern. Vorrei evitarlo se possibile. O è OK per le fabbriche? – Filimindji

+1

Lo considero un pattern anti quando lo si utilizza all'interno dei servizi per ottenere le dipendenze invece di iniettarle in un costruttore o come una proprietà, in fabbrica si sta tentando di astrarre il contenitore Ioc (in modo da poterne utilizzare uno diverso). –

Problemi correlati