5

このコードに相当するNinject 3は何ですか:

Bind<ISession>().ToMethod(ctx => ctx.Kernel.Get<INHibernateSessionFactoryBuilder>()
            .GetSessionFactory()
            .OpenSession())
            .Using<OnePerRequestBehavior>();

InRequestScopeの代わりに使用できることはわかっていますUsing<OnePerRequestBehavior>が、どのように置き換えるのctx.Kernel.Get<INHibernateSessionFactoryBuilder>ですか? (INHibernateSessionFactoryBuilderシングルトンです)

4

2 に答える 2

4

明確にするために、これはモジュール内にあるため、引き続きアクセスできますが、拡張メソッドとして公開されているため、モジュールにもctx.Kernel.Get<T>a を追加する必要があります。using Ninject;Kernel.Get<T>

于 2012-12-07T15:48:15.043 に答える
1

わかりましたので、これが私のために働く最終的なコードです:

using Infrastructure.Data;
using NHibernate;
using Ninject;
using Ninject.Modules;
using Ninject.Web.Common;

namespace Infrastructure.DependencyResolution
{
    public class SessionModule : NinjectModule
    {
        public override void Load()
        {
            Bind<INHibernateSessionFactoryBuilder>().To<NHibernateSessionFactoryBuilder>().InSingletonScope();

            Bind<ISession>().ToMethod(ctx => ctx.Kernel.Get<INHibernateSessionFactoryBuilder>()
                .GetSessionFactory()
                .OpenSession())
                .InRequestScope();      
        }
    }
}

このモジュールを Ninject ブートストラップでロードすると、Web プロジェクトで NH 参照を必要とせずに、NHibernate セッションでリポジトリを使用できます...

于 2012-12-07T16:23:10.333 に答える