Как внедрить daoFactory в NHibernate EventListener - PullRequest
2 голосов
/ 08 июля 2009

Мне нужно добавить какой-нибудь глобальный сервис (daoFactory) в EventListenet, подписанный на событие PostUpdate. Я читал, что это можно сделать так:

public class YourPostInsertListener : IPostInsertEventListener
{
private readonly IPersistentAuditor auditor;

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

public void OnPostInsert(PostInsertEvent @event)

Но этот код просто выдает исключение: для EventListener не был указан конструктор без параметров. И это понятное поведение, потому что я не добавил свой сервис ни в один контейнер. Итак, как я могу указать контактер IoC в NHibernate?

1 Ответ

0 голосов
/ 08 декабря 2010

IoC, который я использовал, - Ninject. Наилучший способ, который я нашел до сих пор, - это воспользоваться ServiceLocator, предоставляемым парнями из Microsoft Patterns and Practices:

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 ) );
...