如何将daoFactory注入NHibernate EventListener

时间:2009-07-08 19:20:04

标签: c# nhibernate design-patterns ioc-container

我需要将一些全局服务(daoFactory)注入PostUpdate事件中订阅的EventListenet。我读过可以这样做:

public class YourPostInsertListener : IPostInsertEventListener
{
private readonly IPersistentAuditor auditor;

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

public void OnPostInsert(PostInsertEvent @event)

但是这段代码只抛出异常:没有为EventListener指定无参数构造函数。这是可以理解的行为,因为我没有将我的服务添加到任何容器中。那么如何在NHibernate中指定IoC容器呢?

1 个答案:

答案 0 :(得分:0)

我一直在使用的IoC是Ninject。到目前为止,我发现的最好方法是利用Microsoft模式和实践人员提供的ServiceLocator:

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

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

在设置IoC容器的类中,您可以这样做:

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