3

私は ServiceStack を初めて使用するので、これはおそらく初歩的な質問です。

ServiceStack を使用する ASP.NET MVC4 アプリケーションに取り組んでおり、派生した MVC4 コントローラーで使用されるクラス (EF コンテキストまたは PetaPoco データベース) 内から現在の IAuthSession を取得する方法を見つけようとしています。 ServiceStackController。

問題のクラスは、ReuseScope.Request スコープで (つまり、HTTP 要求ごとに) Funq に登録されています。理想的には、そのすべてのインスタンスを、コンストラクター パラメーターまたは public財産。

それ、どうやったら出来るの?


アップデート

掘り下げた後、うまくいくと思うものを思いつきました。

AppHost.Configureの場合、現在のリクエストからセッションを返すラムダを登録します。

container.Register<IAuthSession>(c =>
    HttpContext.Current.Request.ToRequest().GetSession());

また:

container.RegisterAutoWired<EFCatalogDb>();

コンストラクター引数としてEFCatalogDb取る私のEFコンテキストはどこにありますか:IAuthSession

public class EFCatalogDb : DbContext
{
    public EFCatalogDb(IAuthSession session) : base()
    { }
    // ...etc....
}

残念ながら、私はこの回避策をテストできる開発段階にないので、他の人にそれが意味があるかどうか尋ねなければなりません.

4

1 に答える 1

1

私の最初の提案は、不要と思われる ServiceStack への依存関係を作成するため、IAuthSession をデータベース クラスから除外することです。

そうは言っても、IAuthSession を登録し、コンテナーに IAuthSession を自動的に注入させるというルートに進むことができると思います。より良い方法は、IAuthSession の周りに独自の「ラッパー クラス」を作成し、それをデータベース クラスに注入することです。これにより、ServiceStack への依存関係が解消されます。

ServiceStack への依存関係を維持することに問題がない場合は、SessionFeatureクラスを使用して次のようなことを行う別の可能性があります。

var key = SessionFeature.GetSessionKey();
authSession = AppHost.Resolve<ICacheClient>().Get<IAuthSession>(key);
于 2013-06-26T18:58:25.823 に答える