5

挿入/更新/削除操作で変更追跡フィールドを自動的に更新するために、UserAuthSessionオブジェクトの現在のインスタンス (ServiceStack から派生) をデータ アクセス リポジトリに挿入する正しい方法を見つけるのに苦労しています。AuthUserSession

サービスコードでリポジトリを新しくする場合、それは簡単なことで、次のようにします。

var repo = new MyRepository(SessionAs<UserAuthSession>());

ただし、私のリポジトリはサービスに自動配線 (注入) さUserAuthSessionれるため、IOC コンテナーへのリポジトリの登録用に定義されたラムダのどこかから取得する必要があります。

public class AppHost : AppHostBase
{
    public override void Configure(Container container)
    {
        container.Register<ICacheClient>(new MemoryCacheClient());
        container.Register<IRepository>(c =>
        {
            return new MyRepository(**?????**);  <-- resolve and pass UserAuthSession
        }
    }
}

Service次に、クラスの ServiceStack コードを見てみましょう。

    private object userSession;
    protected virtual TUserSession SessionAs<TUserSession>()
    {
        if (userSession == null)
        {
            userSession = TryResolve<TUserSession>(); //Easier to mock
            if (userSession == null)
                userSession = Cache.SessionAs<TUserSession>(Request, Response);
        }
        return (TUserSession)userSession;
    }

Request現在のとに基づいてキャッシュされたセッションを検索することがわかりますResponseが、それらはラムダでは利用できません。

解決策は何ですか?それとも、まったく間違った角度から問題に取り組んでいますか?

4

1 に答える 1