Estoy creando una pequeña aplicación C#, que actualmente consta de un conjunto de núcleo y un ensamblado de winforms. Me doy cuenta de que probablemente no necesite Ninject en algo tan pequeño como este, pero me gustaría probarlo.C#, Ninject: ¿Dónde colocas el kernel y tus módulos?
De todos modos, para trabajar con Ninject, he entendido que escribiría un conjunto de módulos, que mapea la clase se devuelve y así sucesivamente. Después de eso, crearía una instancia de IKernel
y cargaría sus módulos en eso.
Pero, ¿dónde guardo esos módulos? ¿Y dónde guardo el kernel? ¿A dónde van las cosas?
Estaba buscando una manera canónica de hacer esto y pensé "¡genial!" cuando te vi vinculado. Malas noticias, ese código es TERRÍFERAMENTE UNIDERO. Si debo envolver el kernel en un singleton, puedo hacerlo yo mismo de una manera segura (pista, constructor estático), pero tengan cuidado con todos los que vienen aquí en el futuro: ese artículo de enlaces es una implementación completamente no segura para subprocesos. –
@JimmyHoffa Estoy de acuerdo en que no es inseguro (sugiera aplicar un enfoque de su elección desde http://csharpindepth.com/articles/general/singleton.aspx). Sin embargo, mucho mejor que eso es ir con el punto principal de mi respuesta, que es tener una raíz de composición que tenga un lugar claro donde pueda tener lugar la inicialización para tomar la necesidad de que esta seguridad de subprocesos (entre otros) quede fuera de la imagen completamente. –
No estoy familiarizado con tu raíz de composición, pero sin acceso al kernel, ¿cómo solicitas objetos de los que quieres que se inyecte el constructor? en su UI quiere acceder a su 'UserManager' que toma' IUserRepository' en construcción; ¿cómo se obtiene ese 'UserManager' sin acceso al núcleo (a través de algo así como un localizador de servicios)? No puedes simplemente 'nuevo UserManager (???);' y esperar que se entregue lo correcto a su constructor, ¿o sí? –