еще раз о 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