@Melz

Как правильно заинджектить Properties.Settings в проект?

Всем привет.

Есть "небольшой легаси проект на WinForms". Там есть небольшой полтергейст с настройками, которые Properties.Settings. В общем начали разбираться и делать рефакторинг с выносом контролов из основного проекта в библиотеки контролов.

У проги есть настройки которые она использует (сюрприз!). Контролы тоже читают и пишут (через формочку пользователи могут ставить галочки).

Чтобы разобраться с полтергейстом сделали абстракцию над Settings, интерфейс со всеми нужными полями в настройках и методами Save и тд.

public interface ISettingProvider
    {
        int MyInt { get; set; }
        string MyString { get; set; }

        void Save();
    }

Соответственно в проекте есть класс для интерфейса которые через гетеры/сетеры использует настройки
public string MyString
        {
            get => Properties.Settings.Default.MyString;
            set => Properties.Settings.Default.MyString = value;
        }


В ТЕСТАХ моким интерфейс и смотрим был для запрос к настройкам.
mock.VerifyGet(...)

Как вы понимаете тк контролы могут читать настройки там и сям, в том числе и из проктов с контролами то настройки хотя и называются Properties.Settings.Default по сути являются разными классами и контролы пишут не в настройки основного проекта, а в настройки себя.

Обычно бы просто передали класс как параметр в конструктор, но это разные классы. Те главные проект знает что есть CL с конролами, но контролам совершенно не надо знать о главном проекте. Иначе получается перекрестная ссылка.

Классический способ побороть такую фигню - вынести нужный код в собственный проект. Библиотека ссылается на него. Главные ссылается на него. Библиотека не знает о главном.
Resharper подсказывает когда настройки больше никем не используются :)

Минусы в общем тоже понятны (если они вообще есть).

Я правильно мыслю?
  • Вопрос задан
  • 115 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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