我需要将一些全局服务(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容器呢?
答案 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 ) );