Могу ли я передать аргументы в конструктор пользовательского приложения log4net? - PullRequest
8 голосов
/ 15 октября 2010

Я бы хотел передать аргументы конструктору пользовательского приложения, поэтому мне кажется, что мне нужно переопределить механизм инициализации Appenders.Проблема в том, что я не могу найти в документах способ его подключения, и это заставляет меня думать, что это невозможно (или что документы неполные).

Что касается версии 1.2.10это невозможно без изменения исходного кода.Соответствующий раздел находится в Repository\Hierarchy\XmlHierarchyConfigurator.cs:L286:

IAppender appender = (IAppender)Activator.CreateInstance(SystemInfo.GetTypeFromString(typeName, true, true));

Как вы видите, он должен использовать эту перегрузку (или что-то подобное), чтобы позволить мне удовлетворить мои потребности.

Activator.CreateInstance(Type, Object[])

Ответы [ 2 ]

4 голосов
/ 15 октября 2010

Я не уверен, что понимаю вашу цель, но если вы хотите, чтобы ваш аппендер был настраиваемым, вам, в основном, нужно предоставить свойство своему аппендиру. Затем вы можете установить это свойство либо программно, либо в файле конфигурации.

UdpAppender предоставляет свойство, подобное этому:

public int LocalPort
{
   get; set;
}

(На самом деле это немного сложнее, поскольку они проверяют, является ли значение в установщике действительным портом.)

В файле конфигурации вы используете его так:

<localPort value="8080" />

Это очень хорошо работает для простых типов, таких как string, int ..., но также и для некоторых сложных типов, таких как IPAddress. Если у вас есть свой собственный тип, вам будет сложнее заставить его работать, и мне придется сначала проверить, как это делается.

1 голос
/ 18 октября 2010

Что касается версии 1.2.10, это невозможно без изменения исходного кода.

Соответствующий раздел находится в репозитории \ Hierarchy \ XmlHierarchyConfigurator.cs в строке 286:

`IAppender appender = (IAppender)Activator.CreateInstance(SystemInfo.GetTypeFromString(typeName, true, true));`

Как видите, он должен использовать перегрузку

Activator.CreateInstance(Type, Object[])
(или что-то в этом роде), чтобы позволить мне удовлетворить свои потребности.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...