Sto creando una piccola applicazione C#, che attualmente consiste in un assembly principale e un assembly winforms. Mi rendo conto che probabilmente non ho davvero bisogno di Ninject in una piccola cosa come questa, ma mi piacerebbe provarlo.C#, Ninject: dove inserisci il kernel e i tuoi moduli?
In ogni caso, per lavorare con Ninject ho capito che si scriverebbe un insieme di moduli, che le mappe vengono restituite e così via. Dopodiché dovrai creare un'istanza di IKernel
e caricare i tuoi moduli in quello.
Ma, dove tengo quei moduli? E dove tengo il kernel? Dove vanno le cose?
Stavo solo cercando un modo canonico per fare questo e ho pensato "fantastico!" quando ti ho visto collegato. Cattive notizie, quel codice è TERRIFICAMENTE SICURO. Se dovessi racchiudere il kernel in un singleton, potrei farlo io stesso in un modo sicuro (suggerimento, costruttore statico) ma saremo avvisati di tutti quelli che verranno qui in futuro: l'articolo che collega è un'implementazione completamente non thread-safe. –
@JimmyHoffa Sono d'accordo sul fatto che non sia sicuro (suggerire di applicare un approccio a tua scelta da http://csharpindepth.com/articles/general/singleton.aspx). Tuttavia, molto meglio di questo è andare con il punto principale della mia risposta, che è avere una radice di composizione che ha un luogo chiaro dove può avvenire l'inizializzazione per prendere la necessità di questo thread di sicurezza (tra gli altri problemi) fuori dalla foto completamente. –
Non ho familiarità con la root della composizione, ma senza accesso al kernel come si richiedono gli oggetti da cui si desidera iniettare il costruttore? nella tua interfaccia utente desideri accedere al tuo 'UserManager' che prende un' IUserRepository' alla costruzione; come si ottiene 'UserManager' senza accesso al kernel (attraverso qualcosa come un localizzatore di servizi)? Non puoi semplicemente "nuovo UserManager (???);" e aspettarti che la cosa giusta sia consegnata al suo costruttore, vero? –