代码之家  ›  专栏  ›  技术社区  ›  Carles Company

ASP.NET MVC会话

  •  2
  • Carles Company  · 技术社区  · 14 年前

    这是不好的做法吗?

    using System.Web.Mvc;
    
    namespace WebInventaris.Utils.Session
    {
        public static class SessionControllerExtensions
        {
            public static void SetSessionVar<T>(this Controller controller, string field, T value)
            {
                controller.Session[field] = value;
            }
    
            public static T GetSessionVar<T>(this Controller controller, string field)
            {
                return (T) controller.Session[field];
            }
        }
    }
    

    我试图将会话与控制器分离,但对这些方法没有什么好的感觉。

    1 回复  |  直到 14 年前
        1
  •  5
  •   Darin Dimitrov    14 年前

    直接从控制器中使用会话没有什么问题(这是将会话作为控制器类的属性公开的原因之一)。我看不出替换的好处:

    Session["foo"] = "bar";
    

    通过调用扩展方法:

    this.SetSessionVar("foo", "bar");
    

    更有趣的地方可能是您的泛型getter,但它仍然不是类型安全的,因为您正在这个方法中进行强制转换,这个方法也可以在控制器操作中完成。因此,最后我不会说这是一个糟糕的实践,但我看不到这样一个类的任何好处,而且它还使您的代码不那么容易被其他开发人员阅读,他们需要理解这是一个扩展方法,并且在幕后它只是使用会话。