Domanda

Sto usando Ninject per caricare diversi moduli. Quando due moduli tentano di associare due diverse implementazioni per un'interfaccia, ninject genera un errore di associazione multipla per a il servizio non è permesso.

Tutti gli altri framework IoC che sto usando (Unity, Windsor, Spring.net, ecc.) tutti hanno la possibilità di "registrare" più implementazioni per un interfaccia.

Lasciami fare un esempio di vita reale:

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>()
    }
}

Quanto sopra genera un'eccezione, mi aspetto che risolva il tipo registrato nell'ultimo modulo da caricare nel kernel. Ho provato lo stesso approccio usando Autofac e funziona come mi aspettavo.

È stato utile?

Soluzione

Ninject 2.0 ha questa capacità, ma Ninject 1.x no. Mentre 2.0 è ancora in beta, ti incoraggio a dare un'occhiata, perché 1.x sarà fuori uso entro un paio di mesi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top