Создание глобального объекта? - PullRequest
3 голосов
/ 19 декабря 2011

Я пытаюсь добиться следующего:

Когда пользователь успешно прошел аутентификацию, мне нужно создать глобальный объект пользователя, к которому я могу получить доступ из разных форм (или классов).

Я просматривал источники данных, доступные в VS, и увидел, что есть опция «Объект», которая может быть подходящей для того, чего я пытаюсь достичь. Проблема в том, что я понятия не имею, как это работает.

Кто-нибудь может указать мне правильное направление?

Спасибо.

Ответы [ 3 ]

4 голосов
/ 19 декабря 2011

Предполагая, что это приложение Windows Forms, вы можете создать класс User, который хранится в статическом классе ApplicationState.

Шаги:

1) Создать свой класс пользователя для хранения информациио пользователе:

public class User
{
    public string Login { get; set; }
    //.. other properties
}

2) Создайте свой класс ApplicationState:

public static class ApplicationState
{
    public static User CurrentUser { get; set; }
}

3) В процессе входа в систему создайте новую версию класса пользователя и назначьте ее для ApplicationStateСвойство .CurrentUser:

    public void CompleteLogin(string sLogin)
    {
        User user = new User();

        user.Login = sLogin;

        ApplicationState.CurrentUser = user;
    }

4) Теперь вы можете использовать ApplicationState.CurrentUser практически в любом месте вашего проекта.

2 голосов
/ 19 декабря 2011

Это называется Singleton , и это плохая вещь (особенно когда его состояние может быть видоизменено).Исследуйте Внедрение зависимостей (DI) вместо этого.На ней даже есть .NET-специфическая книга .

Для каждого запроса приведен простой (вероятно, упрощенный) пример выполнения DI вручную.Библиотека DI Container (также известная как Inversion of Control или библиотека IoC Container) может упростить процесс «подключения всего» в корневом каталоге композиции, а также обычно обеспечивает управление временем жизни и другие функции.

// Composition root of your application
void Main()
{
    // Only instance of user we will ever create
    var user = new User();

    var instance = new MyClass(user);
}

public interface IUser
{
    string Name { get; set; }
}

public class User: IUser
{
    public string Name { get; set; }
}

public class MyClass
{
    public MyClass(IUser user)
    {
        if (user == null)
        {
            throw new ArgumentNullException("user");
        }

        _user = user;
    }

    private readonly IUser _user;
}
0 голосов
/ 19 декабря 2011

Вы можете использовать или создать общедоступный список, убедившись, что вы добавляете аутентифицированных пользователей в список только после того, как они были проверены, вы даже можете сделать это с помощью инкапсуляции доступа к полю, создать свойство List или string [], что вы запрашиваетеВозможно, вы захотите создать свойство уровня класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...