La razón por la que esto se ha marcado como Obsoleto y se cambiará a interno en el futuro es que las personas tienden a utilizar Ninject como un localizador de servicios si es posible hacerlo. Pero Service Locator is an antipattern que no debe ser utilizado. Y como no queremos proporcionar una funcionalidad que ayude a crear software mal diseñado, se eliminará en el futuro.
Si esto necesita muchos cambios en su código, esto es señal de que su código está sufriendo de este malestar Dependency Injection y realmente debería cambiarlo a un mejor diseño.
- Limite al mínimo el acceso al kernel. Casi no hay ninguna situación en MVC en la que necesite algo distinto a la simple inyección de constructor. Por lo tanto, mi primer consejo es refactorizar a la inyección del constructor siempre que sea posible.
- Para estos raros casos donde necesita acceder al núcleo para crear otros objetos, debe inyectar una fábrica a la clase que necesita la nueva instancia e inyectar el núcleo en esta fábrica (si el Constructor tiene un parámetro
Kernel
, ll recibir la instancia haciendo la inyección).
Si realmente desea permanecer con el localizador de servicios, incluso si casi todos le dicen que no lo haga, tendrá que mantener una referencia estática usted mismo.
Todos mis códigos relacionados con MVC, por ejemplo, los controladores tienen inyección de constructor, así que no hay problema. Pero en una situación, tengo que implementar un proveedor de Membresía personalizado donde quiero pasar IRepository al ctor. La solución ony que puedo encontrar está aquí http://stackoverflow.com/questions/5596441/inject-repository-to-custom-membership-provider-with-ninject. Esa es la razón por la que necesito acceder al kernel. ¿Conoces un mejor enfoque? – mahichR
Verificar mi respuesta;) – Guillaume86