Глобальные настройки передаются в экземпляр или на них напрямую ссылаются.
-
06-09-2019 - |
Вопрос
У меня есть класс ведения журнала, экземпляр которого создается при запуске консольного приложения и сохраняется в статической переменной.
Если я хочу, чтобы класс использовал регистратор, следует ли передать его классу в конструкторе или напрямую ссылаться на него?
Я пытаюсь писать модульные тесты, и в любом случае я смогу это сделать.Просто означает, что мне нужно установить статическую переменную перед вызовом кода, который ее использует.
Ваше здоровье.
Нет правильного решения
Другие советы
Похоже, то, что вы ищете, это что-то вроде IoC-контейнер.Вы могли бы использовать Единство EntLib или что-то еще в этом роде.
Чтобы сделать ваши классы максимально пригодными для модульного тестирования, по возможности следует передавать все зависимости, включая регистраторы.Это то, что называется внедрением зависимостей (DI), и это очень распространенный и стандартный шаблон для написания модульно-тестируемого кода.Ведение журнала почти всегда является сквозной задачей, которая встроена только в тела методов, поскольку на самом деле не существует достойных инфраструктур АОП, которые могли бы правильно выявить эти проблемы и применить их декларативно.Необходимость вести журналирование при написании/запуске модульных тестов только увеличивает сложность тестов и, возможно, добавляет дополнительные проблемы с конфигурацией, когда вы действительно хотите, чтобы ваши тесты были максимально простыми и целенаправленными.
Как насчет использования Статический шаблон шлюза ?
Вы можете создать его экземпляр и сохранить его как члена того же класса и вернуть его через свойство.
напримерРегистратор.По умолчанию
Это вернет ссылку на созданный экземпляр.
РЕДАКТИРОВАТЬ:Примером этого может быть класс Console и его метод SetOut.Я имею в виду, что вы можете продолжать использовать Console.WriteLine....и если вы хотите изменить поток, используйте метод SetOut.Он перенаправляет вывод в новый поток.
Надеюсь, это поможет.