首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unity.mvc5 -注册会话对象

Unity.mvc5 -注册会话对象
EN

Stack Overflow用户
提问于 2015-12-21 13:07:10
回答 1查看 363关注 0票数 1

我有一个ISessionState接口

代码语言:javascript
复制
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类:

代码语言:javascript
复制
public class SessionState : ISessionState
{
    private readonly HttpSessionStateBase _session;

    public SessionState(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类:

代码语言:javascript
复制
public class BaseController : Controller
{
    private readonly ISessionState _sessionState;
    protected BaseController(ISessionState sessionState)
    {
        _sessionState = sessionState;
    }

    internal protected ISessionState SessionState
    {
        get { return _sessionState; }
    }
}

和用户控制器:

代码语言:javascript
复制
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");

        return View();
    }
}

我使用Unity进行依赖注入。这一登记:

代码语言:javascript
复制
container.RegisterType<ISessionState, SessionState>();

代码语言:javascript
复制
container.RegisterType<ISessionState, SessionState>(new InjectionConstructor(new ResolvedParameter<HttpSessionStateBase>("session")));

结果:当前类型System.Web.HttpSessionStateBase是一个抽象类,不能构造。您缺少类型映射吗?

在unity.mvc5注册的正确解决方案是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-21 15:59:29

解决这个问题的一种方法是像这样注册HttpSessionStateBase

代码语言:javascript
复制
container.RegisterType<HttpSessionStateBase>(
    new InjectionFactory(x =>
        new HttpSessionStateWrapper(System.Web.HttpContext.Current.Session)));

这将提供基于当前web请求的会话,我认为这是您想要的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34396435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档