Использование Ninject со статическими методами [duplicate]

Я только что прошел ту же проблему и нашел хорошее решение в руководствах PHP.

Я изменил всю свою кодировку файла на UTF8, а затем по умолчанию на мое соединение. Это решило все проблемы.

if (!$mysqli->set_charset("utf8")) {
    printf("Error loading character set utf8: %s\n", $mysqli->error);
} else {
   printf("Current character set: %s\n", $mysqli->character_set_name());
}

Просмотреть источник

8
задан Phillippe Santana 1 June 2013 в 00:46
поделиться

2 ответа

Не делай этого. Не используйте статический класс, для которого нужны собственные зависимости. Это упрощает тестирование и другие типы, которые зависят от этого AuthenticationHelper, не смогут включить его в свой конструктор, что означает, что они скрывают, что они зависят от него.

Вместо этого просто делайте то, что вы всегда делайте: make AuthenticationHelper нестатический, реализуйте на нем интерфейс IAuthenticationHelper и вводите все зависимости через свой публичный конструктор.

Но если вы настаиваете на том, чтобы этот класс статично (что опять-таки действительно плохая идея), создайте на нем статический метод Initialize(UserBusiness userBusiness) и вызовите этот метод на пусковом пути вашего приложения. Вы не можете позволить вашему контейнеру DI использовать этот статический метод. Они не разрешают, потому что 1. это плохая идея, и 2. такой статический метод нужно только вызывать один раз, так что позволить вашему контейнеру автоматически установить это для вас на самом деле не очень помогает.

17
ответ дан Steven 28 August 2018 в 08:01
поделиться

Как примечание, блокировка абсолютно бесполезна, поскольку вы блокируете доступ к локальной переменной «пользователь», которая не будет меняться между строками «if (user == null)».

Вы намерены заблокировать доступ к элементу Context.Session [CURRENT_USER], поэтому ..

            User user = (User)Context.Session[SessionKeys.CURRENT_USER];

            if (user == null)
            {
                lock (_lock)
                {
                    user = (User)Context.Session[SessionKeys.CURRENT_USER];
                    if (user == null)
                    {
                        user = _userBusiness.Find(CurrentUserId);
                        Context.Session[SessionKeys.CURRENT_USER] = user;
                    }
                }
            }
1
ответ дан steve 28 August 2018 в 08:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: