Правильная реализация NLog и Prism - PullRequest
6 голосов
/ 14 мая 2010

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

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

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

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

Привет

1 Ответ

4 голосов
/ 15 января 2011

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

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

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

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

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

...