Используйте учетные данные в конструкторе, не передавая их в

1

У меня есть форма Windows, которая просит пользователя ввести свое имя пользователя и пароль.

public partial class Login : Form
{
    public bool LoginStatus { get; set; }

    public string UserName { get { return username.Text; } }

    public string PassWord { get { return password.Text; } }

Я хочу передать в UserName и PassWord конструктор другого класса.

public ICredentials Creds { get; set; } // <-- Can I use this ??
private readonly ICredentials _credentials;    

public Tools()
{
    _credentials = Creds;
}

Класс Tools() используется часто, и я хотел бы использовать UserName и PassWord и использовать их в конструкторе, не передавая их, потому что тогда мне пришлось бы вносить изменения во все экземпляры класса Tools(). Это возможно? Или мне нужно передать в UserName и PassWord конструктору?

  • 0
    Creds никогда не будут установлены во время Creds вашего конструктора. Если вы хотите централизовать такую логику, лучшим выбором будет контейнер DI.
Теги:

2 ответа

2
Лучший ответ

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

1

Я согласен с @DavidHaney, система впрыска DI решит вашу проблему, хотя для этого потребуется некоторый рефакторинг.

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

Вы можете использовать хранилище потоков, см. Http://msdn.microsoft.com/en-us/library/6sby1byh(v=vs.110).aspx

Или вы можете объявить статическую переменную внутри вашего приложения.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню