2012-10-25 11 views
7

Posso vedere che domande simili sono state poste in precedenza, ma essendo totalmente nuovo a DI e .Net non sono in grado di afferrare l'intera soluzione o non ho trovato la giusta fonte ....Come utilizzare Ninject tra gli assembly

  • Ho assiemi WebAPI, BL, DL.
  • WebAPI dipende BL, BL
  • dipende DL,
  • WebAPI NON riferimento DL e desidero mantenere lo stesso. Ci sono poche altre assemblee ma questo è sufficiente per illustrare i problemi.

WebAPI ha una sezione di avvio dell'applicazione quindi posso usarlo per inizializzare il kernel di Ninject e registrare le dipendenze per il progetto WebAPI.

Come è possibile ottenere lo stesso per BL e altri assiemi?

risposta

3

Ci sono un paio di modi diversi, è possibile utilizzare il Ninject Conventions per risolvere automagicamente ogni ISomething a un'implementazione che ha lo stesso nome (ad esempio IThing ->Thing) oppure è possibile creare un Ninject Module in ogni assemblea che registra le dipendenze (il modulo nel BL potrebbe caricare il modulo nel DL).

L'approccio scelto dipenderà dalla necessità di definire diversi ambiti per oggetti diversi, ad esempio se si desidera che alcune cose vengano risolte come singleton che potrebbero influire sul metodo utilizzato.

+0

Grazie Trevor, comprendo il concetto ma non so come e dove implementare la logica nell'assemblaggio BL. – user1767363

+0

Potete fornire un esempio di come ogni modulo imposta il kernel per Ninject? Sto cercando di imparare anche a risolvere questo problema. – Wavel

+0

@Wavel - Ho aggiunto dei collegamenti alla risposta. –

0

Penso che Mark Seemann's advice about this sia eccezionale: crea una radice di composizione al livello più alto possibile dell'applicazione. Per le app Web, ciò significa nel file Globals.asax. Potrei esporre la buona ragione per questo, ma il post sul blog collegato fa un lavoro migliore.

Questo rompe la stratificazione che stai cercando di raggiungere, ma solo a malapena, e quello che penso sia un modo appropriato. Se il tuo livello web è sufficientemente sottile (ad esempio, potresti sostituirlo con un client spesso abbastanza facilmente), allora non è una grande perdita. Se sei davvero contrario a questo, potresti creare una composizione root nel BL per il DL.

Problemi correlati