2013-03-10 119 views
1

我已经看到了很多关于如何在Asp.Net MVC中通过使用ActionFilter或DI包将会话注入到控制器中的请求来设置会话的文章。我想知道的是,会是一个坏主意/模式只是让喜欢的扩展方法:从控制器获取Nhibernate ISession(每个会话请求)ASP.Net MVC

public static ISession GetNHibernateSession(this Controller controller) 
{ 
    return SessionFactory.OpenSession(); 
} 

以便在需要像当会话可以被实例化:

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

    } 

原因这可能是一个好/坏主意,将不胜感激

回答

1

好:

  • 很简单
  • 这只是工作

坏:

  • 你正在做的会话管理,哪怕它只是一个三线,在你的代码
  • 随着扩展方法,你不能替换测试行为

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

相关问题