Правильная реализация NLog и Prism

Что было бы лучшим способом реализовать NLog в моем приложении Prism / CAL WPF. Это может быть любительский вопрос, я немного новичок во всей структуре Prism:)

Я подумал о том, чтобы поместить ссылку на dll NLog в модуле инфраструктуры и создать синглтон-класс-оболочку, например, MyLogger. Я думал о том, чтобы иметь возможность иметь ссылку на реализацию 1-го регистратора где-то в центральном месте, на которое все ссылаются, и единственное, что я знаю в Prism, - это ваш модуль инфраструктуры.

Очевидным другим способом является добавление ссылки на NLog для каждого модуля, но я думаю, что это лишило бы цели развязки и всего этого.

Любые идеи будут наиболее полезными

С уважением

1 ответ

Решение

Я бы порекомендовал что-то похожее на вашу первую идею, хотя она использует уже существующий интерфейс в Prism.

Хотя я не уверен, какие именно сигнатуры методов доступны вам в NLog, вы можете рассмотреть возможность использования интерфейса Prog ILoggerFacade, который обычно определяется в вашем Bootstrapper (см. Пример приложения StockTraderRI для его настройки). Как правило, это действует как проход к интерфейсу Microsoft Composite Logging, но нет никаких причин, по которым вы не можете использовать это для подключения к своему собственному регистратору.

Несколько причин, чтобы рассмотреть этот подход:

  1. Он использует уже существующий интерфейс ILoggerFacade в структуре Prism, с которым другие разработчики будут знакомы
  2. Если позже вы решите перейти на другую среду ведения журналов, вам просто нужно заменить объект, стоящий за реализацией ILoggerFacade.

Другой подход заключается в том, чтобы сделать так, как вы предлагаете: создать интерфейс, который определяет службу для NLog (или предоставить существующий интерфейс NLog) в вашей инфраструктуре DLL, и зарегистрировать реализацию этой службы в вашем загрузчике. Затем вы можете использовать свой контейнер внедрения зависимостей, чтобы получить ссылку на службу регистрации в ваших модулях. Однако обратите внимание, что это действительно просто воспроизводит то, что интерфейс ILoggerFacade уже дает вам.

Другие вопросы по тегам