2012-10-08 21 views
1

我在過遷移我的應用程序ServiceStack的過程中,並已註冊了使用ServiceStackController現有MVC3控制器,通過How can I use a standard ASP.NET session object within ServiceStack service implementation我可以在ASP.NET託管的IHttpHandler和現有的ASP.NET頁面中使用ServiceStack的ISession嗎?

概述的,我不知道在哪裏找到PageBase類,在引用文章,在測試項目之外。這是我需要複製/粘貼到我的解決方案?

我也有幾個自定義的IHttpHandler(.ashx)頁面,我試圖在同一個ISession上,但是在引用的文章中沒有看到基類。這是可能的,還是我需要移動這些IHttpHandler到ServiceStack服務,以便能夠利用ISession?

回答

1

當您安裝ServiceStack.Host.AspNet NuGet程序包時,會添加ASP.NET PageBase class is a T4 template

ServiceStack的所有緩存和會話支持都完全獨立於MVC控制器,ASP.NET基本頁面只是通過解析ServiceStack的IOC中的ICacheClientISessionFactory來實現的。

如果你的MVC控制器和ASP.NET基地頁面自動連線你可以聲明爲公共屬性,他們將通過ServiceStack's 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))); 
    } 
相關問題