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)));
}