5

そのため、ユーザーの概念をアプリケーションに導入しようとしており、独自のカスタムログインルーチンなどのセットが正常に機能しています。私のモジュールでは、IUserSessionを実装とInSingletonScopeにバインドしています。

これが事実であると思われ、これが正しいことではないことを証明できました。同じサイトに対して2人のユーザーでログインしようとすると、1セットのデータしか取得できません。

MembershipProviderを実装する場合、そのような制限を回避しますか?メンバーシッププロバイダーを実装する場合、すべてを挿入する必要はありませんが、ログインはユーザー名/パスワードだけではありません。追加のデータを使用してログインするにはどうすればよいですか?」

4

1 に答える 1

11

InSingletonScopeは、ユーザーセッションごとに制限されることなく、アプリケーション全体で共有されます。あなたがすることはそれを変えることはありません。InRequestScopeのような他のものを使用する必要がありますが、それは実際のリクエストごとにのみ共有されます...

このサイトを試してください:http://iridescence.no/post/Session-Scoped-Bindings-With-Ninject-2.aspx

public static class NinjectSessionScopingExtention {
    public static void InSessionScope<T>(this IBindingInSyntax<T> parent) {
        parent.InScope(SessionScopeCallback);
    }

    private const string _sessionKey = "Ninject Session Scope Sync Root";

    private static object SessionScopeCallback(IContext context) {
        if (HttpContext.Current.Session[_sessionKey] == null) {
            HttpContext.Current.Session[_sessionKey] = new object();
        }

        return HttpContext.Current.Session[_sessionKey];
    }
}
于 2011-01-14T04:39:05.033 に答える