Ninject за сеанс синглтон? - PullRequest
5 голосов
/ 14 января 2011

Поэтому я пытаюсь представить концепцию пользователя в своем приложении, и у меня есть собственный набор пользовательских процедур входа в систему и т. Д., Которые работают нормально. В моем модуле я связываю свою IUserSession с моей реализацией и InSingletonScope.

Теперь я подозреваю, что это был случай, и я смог доказать, что это неправильно, если я попытаюсь войти в систему с двумя пользователями на одном сайте, я получу только один набор данных.

Если я реализую членство в MembershipProvider, избегу ли я такого ограничения. Я знаю, что если я реализую поставщика членства, мне не нужно вводить все, но мой логин - это не просто имя пользователя / пароль, как мне войти в систему с дополнительными данными "?

1 Ответ

11 голосов
/ 14 января 2011

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];
    }
}
...