Ninject, più attacchi di servizio
-
10-07-2019 - |
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.
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.