Как внедрить daoFactory в NHibernate EventListener

2

Мне нужно внедрить некоторую глобальную службу (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?

Теги:
design-patterns
nhibernate
ioc-container

1 ответ

0
Лучший ответ

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню