Ninject, múltiples enlaces de servicio
-
10-07-2019 - |
Pregunta
Estoy usando Ninject para cargar varios módulos. Cuando dos módulos intentan enlazar dos implementaciones diferentes para una interfaz, ninject genera un error que vincula múltiples para un El servicio no está permitido.
Todos los demás marcos de IoC que estoy usando (Unity, Windsor, Spring.net, etc.) todos tienen la capacidad de 'registrar' múltiples implementaciones para un interfaz.
Permítanme dar un ejemplo de la vida real:
public class HealtMonitorEmailAlertServiceModule : StandardModule
{
public override void Load()
{
this.Bind<IAlertService>().To<EmailAlertService>();
}
}
public class HealtMonitorSmsAlertServiceModule : StandardModule
{
public override void Load()
{
this.Bind<IAlertService>().To<SmsAlertService>();
}
}
public class Program
{
static void Main()
{
var emailService = new HealtMonitorEmailAlertServiceModule();
var smsService = new HealtMonitorSmsAlertServiceModule();
IKernel kernel = new StandardKernel(emailService, smsService);
kernel.Get<IAlertService>()
}
}
Lo anterior genera una excepción, esperaría que resuelva el tipo registrado en el último módulo para cargar en el núcleo. He intentado exactamente el mismo enfoque con Autofac y funciona como esperaba.
Solución
Ninject 2.0 tiene esta capacidad, pero Ninject 1.x no. Si bien 2.0 aún está en versión beta, le recomiendo que eche un vistazo, ya que 1.x finalizará en un par de meses.