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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top