2

PostUpdateイベントでサブスクライブされたEventListenetにグローバルサービス(daoFactory)を注入する必要があります。私はこのようにすることが可能であることを読みました:

public class YourPostInsertListener : IPostInsertEventListener
{
private readonly IPersistentAuditor auditor;

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

public void OnPostInsert(PostInsertEvent @event)

ただし、このコードは例外をスローするだけです。EventListenerにパラメーターなしのコンストラクターが指定されていません。そして、これは理解できる動作です。これは、サービスをどのコンテナーにも追加していないためです。では、NHibernateでIoCコントローラーを指定するにはどうすればよいですか?

4

1 に答える 1

0

私が使っているIoCはNinjectです。私がこれまでに見つけた最善の方法は、Microsoft Patterns and Practices 担当者によって提供された 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 ) );
于 2010-12-08T16:15:19.407 に答える