从Controller(每个请求的会话)ASP.Net MVC获取Nhibernate ISession

时间:2013-03-10 11:14:47

标签: c# asp.net-mvc nhibernate

我已经看过很多关于如何在Asp.Net MVC中为每个请求设置会话的帖子,方法是使用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
        }

    }

为什么这可能是一个好/坏的想法将非常感激

1 个答案:

答案 0 :(得分:1)

好:

  • 很简单
  • 它正常工作

为:

  • 您正在进行会话管理,即使它只是三行,遍布您的代码
  • 使用扩展方法,您无法替换测试行为

简而言之,对于小型RAD和概念验证项目,您的想法将会正常运行。对于更复杂的开发,最好从控制器中提取会话管理,至少将其移动到基类。