带有 Ninject 的 NHibernate 会话管理

Posted

技术标签:

【中文标题】带有 Ninject 的 NHibernate 会话管理【英文标题】:NHibernate Session Management w/ Ninject 【发布时间】:2010-08-27 16:19:00 【问题描述】:

这真的是我必须做的所有事情来使用 Ninject 实现每个请求的会话吗?

public class WebModule : NinjectModule

    public override void Load()
                
        Bind<ISession>().ToMethod(x => MvcApplication.SessionFactory.OpenSession()).InRequestScope();            
    

全球.asax:

public class MvcApplication : NinjectHttpApplication

    public static ISessionFactory SessionFactory = CreateSessionFactory();

    public static void RegisterRoutes(RouteCollection routes)  /* Routing Stuff */ 

    protected override void OnApplicationStarted()
    
        AreaRegistration.RegisterAllAreas();
        RegisterRoutes(RouteTable.Routes);
    

    protected override void OnApplicationStopped()
    
        SessionFactory.Dispose();
    

    protected static ISessionFactory CreateSessionFactory()  /* session factory stuff */ 

    protected override IKernel CreateKernel()
    
        return new StandardKernel(new WebModule());
    

这有什么问题吗?这似乎太容易了。

【问题讨论】:

【参考方案1】:

阅读this post 后,我决定不这样做。除非有人说出来,否则我会这样做the old fashioned way。

【讨论】:

引用的帖子已经过时了(当时也是:D)。见github.com/ninject/Ninject.Web.Common/wiki/InRequestScope 说了这么多,手动明确地处理ISessions 并不丢人,这取决于你在做什么——提交和管理你的工作单元绝对是有意识的事情。

以上是关于带有 Ninject 的 NHibernate 会话管理的主要内容,如果未能解决你的问题,请参考以下文章

带有 NullReferenceException 的 Xamarin 跨平台中的 Ninject 实现

WebAPI CORS 和 Ninject

在使用fluent-nhibernate配置nhibernate时,为什么会出现MissingMethodException?

使用 NHibernate 作为带有输入参数的命名查询调用存储过程

NHibernate 使用带有 WHERE IN 的 QueryOver

使用带有 NHibernate.Mapping.Attributes 的鉴别器为每个子类做表