Ninject 3与此代码的等效内容是什么:
Bind<ISession>().ToMethod(ctx => ctx.Kernel.Get<INHibernateSessionFactoryBuilder>()
.GetSessionFactory()
.OpenSession())
.Using<OnePerRequestBehavior>();
我知道我可以使用InRequestScope
代替Using<OnePerRequestBehavior>
但是如何替换ctx.Kernel.Get<INHibernateSessionFactoryBuilder>
? (INHibernateSessionFactoryBuilder
是单身人士)
答案 0 :(得分:4)
好的,只是为了澄清 - 因为这是在一个模块中,您仍然可以访问ctx.Kernel.Get<T>
但是您需要向模块添加using Ninject;
,因为Kernel.Get<T>
被公开为扩展方法。
答案 1 :(得分: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引导程序,我可以使用NHibernate会话的存储库,而不需要在Web项目中使用NH引用...