Глобальные настройки передаются в экземпляр или на них напрямую ссылаются.

StackOverflow https://stackoverflow.com/questions/933411

  •  06-09-2019
  •  | 
  •  

Вопрос

У меня есть класс ведения журнала, экземпляр которого создается при запуске консольного приложения и сохраняется в статической переменной.

Если я хочу, чтобы класс использовал регистратор, следует ли передать его классу в конструкторе или напрямую ссылаться на него?

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

Ваше здоровье.

Нет правильного решения

Другие советы

Похоже, то, что вы ищете, это что-то вроде IoC-контейнер.Вы могли бы использовать Единство EntLib или что-то еще в этом роде.

Чтобы сделать ваши классы максимально пригодными для модульного тестирования, по возможности следует передавать все зависимости, включая регистраторы.Это то, что называется внедрением зависимостей (DI), и это очень распространенный и стандартный шаблон для написания модульно-тестируемого кода.Ведение журнала почти всегда является сквозной задачей, которая встроена только в тела методов, поскольку на самом деле не существует достойных инфраструктур АОП, которые могли бы правильно выявить эти проблемы и применить их декларативно.Необходимость вести журналирование при написании/запуске модульных тестов только увеличивает сложность тестов и, возможно, добавляет дополнительные проблемы с конфигурацией, когда вы действительно хотите, чтобы ваши тесты были максимально простыми и целенаправленными.

Как насчет использования Статический шаблон шлюза ?

Вы можете создать его экземпляр и сохранить его как члена того же класса и вернуть его через свойство.

напримерРегистратор.По умолчанию
Это вернет ссылку на созданный экземпляр.

РЕДАКТИРОВАТЬ:Примером этого может быть класс Console и его метод SetOut.Я имею в виду, что вы можете продолжать использовать Console.WriteLine....и если вы хотите изменить поток, используйте метод SetOut.Он перенаправляет вывод в новый поток.

Надеюсь, это поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top