1

我正在将我的应用程序迁移到 ServiceStack,并已使用 ServiceStackController 注册了现有的 MVC3 控制器,如如何在 ServiceStack 服务实现中使用标准 ASP.NET 会话对象所述

在测试项目之外,我看不到在哪里可以找到文章中引用的 PageBase 类。这是我需要复制/粘贴到我的解决方案中的东西吗?

我也有一些自定义的 IHttpHandler (.ashx) 页面,我正在尝试使用相同的 ISession,但我没有看到在引用的帖子中调用的基类。这可能吗,还是我需要将这些 IHttpHandler 移动到 ServiceStack 服务才能利用 ISession?

4

1 回答 1

1

ASP.NET PageBase 类是在安装ServiceStack.Host.AspNet NuGet 包时添加的 T4 模板。

ServiceStack 的所有缓存和会话支持完全独立于 MVC 控制器,而 ASP.NET 基页仅来自于 ServiceStack 的 IOC 的解析ICacheClient和处理。ISessionFactory

如果您的 MVC 控制器和 ASP.NET 基本页面是自动连接的,您可以将它们声明为公共属性,它们将由ServiceStack 的 IOC注入,否则您可以直接使用单例访问 ServiceStack 的 IOC:

var cache = Endpoint.AppHost.TryResolve<ICacheClient>();
var typedSession = cache.SessionAs<CustomUserSession>(  //Uses Ext methods
    HttpContext.Current.Request.ToRequest(),  //ASP.NET HttpRequest singleton
    HttpContext.Current.Request.ToResponse()  //ASP.NET HttpResponse singleton
);

访问会话都以相同的方式完成,这是来自 ServiceStack 的Service.cs基类的示例代码:

    private ICacheClient cache;
    public virtual ICacheClient Cache
    {
        get { return cache ?? (cache = TryResolve<ICacheClient>()); }
    }

    private ISessionFactory sessionFactory;
    public virtual ISessionFactory SessionFactory
    {
        get { return sessionFactory ?? (sessionFactory = TryResolve<ISessionFactory>()) ?? new SessionFactory(Cache); }
    }

    /// <summary>
    /// Dynamic Session Bag
    /// </summary>
    private ISession session;
    public virtual ISession Session
    {
        get
        {
            return session ?? (session = SessionFactory.GetOrCreateSession(Request, Response));
        }
    }

    /// <summary>
    /// Typed UserSession
    /// </summary>
    private object userSession;
    protected virtual TUserSession SessionAs<TUserSession>()
    {
        return (TUserSession)(userSession ?? (userSession = Cache.SessionAs<TUserSession>(Request, Response)));
    }
于 2012-10-08T02:07:25.183 回答