Правильная реализация NLog и Prism
Что было бы лучшим способом реализовать NLog в моем приложении Prism / CAL WPF. Это может быть любительский вопрос, я немного новичок во всей структуре Prism:)
Я подумал о том, чтобы поместить ссылку на dll NLog в модуле инфраструктуры и создать синглтон-класс-оболочку, например, MyLogger. Я думал о том, чтобы иметь возможность иметь ссылку на реализацию 1-го регистратора где-то в центральном месте, на которое все ссылаются, и единственное, что я знаю в Prism, - это ваш модуль инфраструктуры.
Очевидным другим способом является добавление ссылки на NLog для каждого модуля, но я думаю, что это лишило бы цели развязки и всего этого.
Любые идеи будут наиболее полезными
С уважением
1 ответ
Я бы порекомендовал что-то похожее на вашу первую идею, хотя она использует уже существующий интерфейс в Prism.
Хотя я не уверен, какие именно сигнатуры методов доступны вам в NLog, вы можете рассмотреть возможность использования интерфейса Prog ILoggerFacade, который обычно определяется в вашем Bootstrapper (см. Пример приложения StockTraderRI для его настройки). Как правило, это действует как проход к интерфейсу Microsoft Composite Logging, но нет никаких причин, по которым вы не можете использовать это для подключения к своему собственному регистратору.
Несколько причин, чтобы рассмотреть этот подход:
- Он использует уже существующий интерфейс ILoggerFacade в структуре Prism, с которым другие разработчики будут знакомы
- Если позже вы решите перейти на другую среду ведения журналов, вам просто нужно заменить объект, стоящий за реализацией ILoggerFacade.
Другой подход заключается в том, чтобы сделать так, как вы предлагаете: создать интерфейс, который определяет службу для NLog (или предоставить существующий интерфейс NLog) в вашей инфраструктуре DLL, и зарегистрировать реализацию этой службы в вашем загрузчике. Затем вы можете использовать свой контейнер внедрения зависимостей, чтобы получить ссылку на службу регистрации в ваших модулях. Однако обратите внимание, что это действительно просто воспроизводит то, что интерфейс ILoggerFacade уже дает вам.