еще раз о log4net и конфиге Unity IOC

я наткнулся на некоторые из этих вопросов, лежащих на разных сайтах, и l4n officianados, похоже, ответили на вопрос об облегченной оболочке, которую log4net 'является' (Дон»ты понимаешь?) и тому подобные ошеломляющие факты.

Однако кажется, что пользователи просят (и это мой вопрос), как вписать модель объекта log4net в последовательность registertype / registerinstance в интерфейсе конфигурации Fluent.

Цель здесь не будетне перефразировать 144, а просто взять приличную ссылку, которая не Требуется захватить поток текучей среды, как бы.

бедный ejemplow, я хочу получить ссылку на сконфигурированный экземпляр ILog из метода LogManger.GetLogger и поместить его в свободный поток достаточно рано, чтобы добавить его в свойства моих нижестоящих объектов.

Поэтому в ответ на одно нетерпеливое предложение я попытался создать нормальный экземпляр ILog каноническим способом:

log4net.Config.XmlConfigurator.Configure();
static readonly log4Net.Ilog Log = LogManager.GetLogger(thatlongassemblyreflectionstuff);

Так что было бы тривиально (в реальном смысле без усилий) добавить эту ссылку в контейнер Unity и продолжить мою замечательную жизнь.

Тем не менее, подпись для метода RegisterInstance хочетТип' не интерфейс.

Для тех, кто неПри поиске в объектной модели log4net, afficiananderos верны: l4n - это 'обертка» и ты можешьне понимаютип' для журнала штуковина.

Так что теперь я должен проверить. И вы знаете, что это значит, это может занять минуту, но, скорее всего, займет час или четыре (аналогично написанию «час' а также 'четыре» никогда не бывают случайными в реальной жизни).

Однако следующее, за исключением исключенной части о канонической установке, сработало:

container
  .RegisterInstance("Logger", Log, new ContainerControlledLifetimeManager())
.RegisterType
(
   "CtlrCtx", 
   new ContainerControlledLifetimeManager(), 
   new InjectionConstructor(new ResolvedParameter("MsgBldr")),
   new InjectionProperty("Log",new ResolvedParameter("Logger"))
);

Таким образом, хеш-коды для оригинального объекта Log и объекта Log, введенного в свойство моего маленького объекта Context, идентичны.

Тем не мение...

Процесс внедрения потребовал, чтобы я открыл свойство Log объекта Context через его интерфейс, то есть он больше не мог быть статическим объектом. И то, является ли объект log4net ILog статическим, кажется, решающим фактором относительно того, является ли он сериализуемым и может быть распределен между сборками без существенноговремя выполнения станет нестабильным предупреждения (которые действительно значимы только для поклонников Матрицы).

Обескураженный, хотя и не сдерживаемый, я использовал Resharper 'изящныйв собственность с отступающим полем и установите фоновое поле как статическое, в то время как свойство Interface оставалось нестатичным. Хорошо это построено, и тест бежал зеленый.

Так что я даже сделал перестройку, и это сработало. Так что, возможно, когда это пузыри до интеграционных тестов япройду мимо log4net нетt сериализуемый разгром.

Так что, возможно, это поможет

Спасибо

Stato

Ответы на вопрос(2)

Ваш ответ на вопрос