Глобальные настройки, переданные экземпляру или на которые есть прямая ссылка - PullRequest
1 голос
/ 01 июня 2009

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

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

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

Приветствие.

Ответы [ 4 ]

1 голос
/ 01 июня 2009

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

0 голосов
/ 01 июня 2009

Как насчет использования Static Gateway Pattern ?

0 голосов
/ 01 июня 2009

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

например. Logger.Default
Это вернет ссылку на экземпляр, который был создан.

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

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

0 голосов
/ 01 июня 2009

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

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