Je crée une petite application C#, qui consiste actuellement en un assemblage de noyau et un assemblage de winforms. Je me rends compte que je n'ai probablement pas vraiment besoin de Ninject dans une petite chose comme ça, mais je voudrais l'essayer.C#, Ninject: Où mettez-vous le noyau et vos modules?
Quoi qu'il en soit, pour travailler avec Ninject J'ai compris que vous écririez un ensemble de modules, quelle carte est retournée, et ainsi de suite. Après cela, vous créez une instance de IKernel
et chargez vos modules dans celui-ci.
Mais, où puis-je conserver ces modules? Et où puis-je garder le noyau? Où vont les choses?
Je cherchais simplement une façon canonique de le faire et je me suis dit "génial!" quand je t'ai vu en lier un. Mauvaise nouvelle, ce code est TERRIFICALLY UNTHREADSAFE. Si je devrais enrouler le noyau dans un singleton, je peux le faire moi-même de manière sûre (indice, constructeur statique) mais être prévenu tous ceux qui viendront ici dans le futur: Cet article de liens est à une implémentation complètement non thread-safe. –
@JimmyHoffa Je suis d'accord qu'il n'est pas threadsafe (suggère d'appliquer une approche de votre choix de http://csharpindepth.com/articles/general/singleton.aspx). Cependant, mieux vaut aller avec le point principal de ma réponse, qui est d'avoir une racine de composition qui a un endroit clair où l'initialisation peut avoir lieu pour prendre le besoin de sécurité de ce fil (parmi d'autres questions) hors de l'image complètement. –
Je ne connais pas votre racine de composition, mais sans accès au noyau, comment demandez-vous les objets dont vous voulez que le constructeur soit injecté? dans votre interface utilisateur, vous voulez accéder à votre 'UserManager' qui prend un' IUserRepository' à la construction; Comment obtenez-vous ce 'UserManager' sans accès au noyau (via quelque chose comme un localisateur de service)? Vous ne pouvez pas juste 'new UserManager (???);' et vous attendre à ce que la bonne chose soit transmise à son constructeur? –