2009-07-08 5 views
2

Je dois Injecter un service global (daoFactory) dans EventListenet souscrit à l'événement PostUpdate. 'ai lu qu'il est possible de le faire de cette façon:Comment Injecter daoFactory dans NHibernate EventListener

public class YourPostInsertListener : IPostInsertEventListener 
{ 
private readonly IPersistentAuditor auditor; 

public YourPostInsertListener(IPersistentAuditor auditor) 
{ 
    this.auditor = auditor; 
} 

public void OnPostInsert(PostInsertEvent @event) 

Mais ce code jette juste exception: aucun constructeur n'a été spécifié pour parameterless EventListener. Et c'est un comportement compréhensible, parce que je n'ai ajouté mon service à aucun conteneur. Alors, comment puis-je spécifier le contauner IoC dans NHibernate?

Répondre

0

L'IoC que j'ai utilisé est Ninject. La meilleure façon que je trouve à ce jour est de profiter de la ServiceLocator provdided par les gars pratiques et modèles Microsoft:

internal class YourPostInsertListener : IPostInsertEventListener 
{ 
    IKernel Kernel 
    { 
     get 
     { 
      return ServiceLocator.Current.GetInstance<IKernel>(); 
     } 
    } 

    IPersistentAuditor 
    { 
     get 
     { 
      return Kernel.Get<IPersistentAuditor>(); 
     } 
    } 
    // ... Rest of class 
} 

Dans la classe qui met en place votre conteneur IoC vous feriez ceci:

ServiceLocator.SetLocatorProvider(() => new NinjectServiceLocator(kernel)); 
Questions connexes