Я использую лесозаготовительную площадку Castle Windsor, и она отлично работает. У меня есть установщик, который регистрирует перехватчик плюс средство для подключения к событиям, так что я могу держать большую часть моего кода в блаженном неведении ни о Castle, ни о log4net.
Большая часть моей регистрации происходит в коде, но для регистрации я подключаю его в web.config (который устанавливается первым) следующим образом:
<castle>
<facilities>
<facility id="logging"
type="Castle.Facilities.Logging.LoggingFacility, Castle.Facilities.Logging" loggingApi="log4net" />
</facilities>
<installers>
<install type="MyProject.LoggerInstaller,MyProject" />
</installers>
</castle>
Причина в том, что мне не нужно включать этот раздел конфигурации, когда я перехожу к производству. Это также означает, что я могу очень легко переключаться с log4net на nlog на все, что нам может понадобиться на лету. Это означает, что ни один из моих компонентов не должен напрямую ссылаться на log4net.
Проблема, с которой я столкнулся, заключается в том, что я хотел бы использовать ведение журнала на этапе регистрации. Я делаю это, потому что регистрация немного сложна, и я хочу иметь возможность легко следить за тем, что происходит и сколько времени это занимает. (В основном потому, что у меня есть система типов плагинов.)
В моем LoggerInstaller я пытаюсь разрешить ILoggerFactory, чтобы я мог создать регистратор и подключить некоторые события для него в моем служебном объекте. Но это не сработает:
ComponentNotFoundException: No component for supporting the service Castle.Core.Logging.ILoggerFactory was found
Покопавшись в исходном коде Castle, я думаю, что все установщики устанавливаются раньше, чем какие-либо средства, поэтому кажется, что средство не было инициализировано внутри моего установщика. Если я создам второй установщик только для того, чтобы подключать события, чтобы этого не происходило через конфигурацию XML, тогда он работает, но я хотел бы, чтобы все журналы были связаны вместе - и нет смысла подключать события, если ведение журнала не нет в наличии. (И мне нужно как-то выяснить, включено ли ведение журнала .. ??)
В идеале я хотел бы зарегистрировать средство ведения журнала Castle из моего установщика, но я не знаю, как завершить его настраиваемые элементы. (Или хочу ли я.)
Есть способ попроще? Я подозреваю, что я не делаю того, что обычно является хорошей идеей, поскольку я знаю, что на самом деле мне не следует решать на этапе регистрации. Но я думаю, что установка достаточно сложна, чтобы потребовать небольшого протоколирования.
Кто-нибудь еще делал подобное раньше? Любая помощь (или переход на более праведный путь!) Будет очень благодарна.