【发布时间】:2015-04-09 00:24:25
【问题描述】:
我正在尝试创建一个 SessionWrapper 类,我可以在我的 MVC 应用程序中管理会话。为此,我认为最好的方法是为 HttpContext 创建一个包装类,然后允许我访问 HttpContext.Current.Session。
SessionState 接口
public interface ISessionState
{
void Clear();
void Delete(string key);
object Get(string key);
T Get<T>(string key) where T : class;
ISessionState Store(string key, object value);
}
SessionState 类
public class DefaultSessionState : ISessionState
{
private readonly HttpSessionStateBase _session;
public DefaultSessionState(HttpSessionStateBase session)
{
_session = session;
}
public void Clear()
{
_session.RemoveAll();
}
public void Delete(string key)
{
_session.Remove(key);
}
public object Get(string key)
{
return _session[key];
}
public T Get<T>(string key) where T : class
{
return _session[key] as T;
}
public ISessionState Store(string key, object value)
{
_session[key] = value;
return this;
}
}
BaseController 类
public abstract class BaseController : Controller
{
private readonly ISessionState _sessionState;
protected BaseController(ISessionState sessionState)
{
_sessionState = sessionState;
}
internal protected ISessionState SessionState
{
get { return _sessionState; }
}
}
使用 SessionState 包装器
public class UserController : BaseController
{
public UserController(ISessionState sessionState) : base(sessionState) { }
public ActionResult Index()
{
// clear the session and add some data
SessionState.Clear();
SessionState.Store("key", "some value");
}
}
我收到以下错误:
“/”应用程序中的服务器错误。
没有为此对象定义无参数构造函数。
【问题讨论】:
-
对于 UserController,看起来您有名称为“MyController”的构造函数。这是您的代码中的错字还是真的像这样?此外,它们也不是您的 UserController 构造函数上的右括号。
-
它的错字我会更新它,但如果我缺少任何右大括号或左大括号,我将永远无法获得运行时错误:)
-
这就是我的想法,只是确保:)
标签: c# asp.net-mvc asp.net-mvc-4 session