C# 从控制器获取Nhibernate会话(每个请求的会话)ASP.Net MVC

C# 从控制器获取Nhibernate会话(每个请求的会话)ASP.Net MVC,c#,asp.net-mvc,nhibernate,C#,Asp.net Mvc,Nhibernate,我看过很多关于如何在Asp.NETMVC中通过使用ActionFilter或DI包将会话注入控制器来设置每个请求的会话的文章。我想知道的是,仅仅制作一个扩展方法(如: public static ISession GetNHibernateSession(this Controller controller) { return SessionFactory.OpenSession(); } 以便在需要时可以实例化会话,如: public ActionResult DoSomethin

我看过很多关于如何在Asp.NETMVC中通过使用ActionFilter或DI包将会话注入控制器来设置每个请求的会话的文章。我想知道的是,仅仅制作一个扩展方法(如:

public static ISession GetNHibernateSession(this Controller controller)
 {
   return SessionFactory.OpenSession();
 }
以便在需要时可以实例化会话,如:

public ActionResult DoSomething()
    {
      using(  var session = this.GetNHibernateSession())
        {
           // Do something with the session
        }

    }
这可能是一个好主意/坏主意的原因将受到高度赞赏

好:

  • 很简单
  • 它只是工作
坏的:

  • 您正在执行会话管理,即使它只是一个三行代码
  • 对于扩展方法,您不能替换测试的行为
简而言之,对于小型、RAD和概念验证项目,您的想法将很好地发挥作用。对于更复杂的开发,最好从控制器中提取会话管理,至少将其移动到基类。

好:

  • 很简单
  • 它只是工作
坏的:

  • 您正在执行会话管理,即使它只是一个三行代码
  • 对于扩展方法,您不能替换测试的行为
简而言之,对于小型、RAD和概念验证项目,您的想法将很好地发挥作用。对于更复杂的开发,最好从控制器中提取会话管理,至少将其移动到基类