2009-03-11 15 views
4

J'utilise Ninject pour charger plusieurs modules. Lorsque deux modules tentent de lier deux implémentations différentes pour une interface, ninject génère une erreur indiquant que plusieurs liaisons pour un service ne sont pas autorisées.Ninject, plusieurs liaisons de service

Tous les autres frameworks IoC que j'utilise (Unity, Windsor, Spring.net, etc.) ont tous la possibilité de 'enregistrer' plusieurs implémentations pour une interface .

Laissez-moi vous donner un exemple concret de la vie:

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

Le ci-dessus génère une exception, je pense qu'elle doit résoudre le type enregistré dans le dernier module à charger dans le noyau. J'ai essayé exactement la même approche en utilisant Autofac et cela fonctionne comme je m'y attendais.

Répondre

4

Ninject 2.0 a cette capacité, mais pas Ninject 1.x. Alors que le 2.0 est encore en version bêta, je vous encourage à jeter un coup d'œil, car 1.x sera en fin de vie dans quelques mois.

+1

Merci pour la réponse Nate, je vais vérifier Ninject 2.0 très prochainement. Super travail en passant, je suis impressionné par vos compétences de ninja. –