我想将参数传递给自定义appender的构造函数,所以我想我必须重写Appenders的初始化机制。问题是我在文档中找不到一种方法来解决它,这让我觉得它不可能(或者说文档不完整)。
对于版本1.2.10,如果不修改源代码,则无法做到这一点。相关部分位于Repository\Hierarchy\XmlHierarchyConfigurator.cs:L286
:
IAppender appender = (IAppender)Activator.CreateInstance(SystemInfo.GetTypeFromString(typeName, true, true));
正如你所看到的,它应该使用这种重载(或者那种方式)来让我满足我的需求。
Activator.CreateInstance(Type, Object[])
答案 0 :(得分:4)
我不确定我是否了解您的目标,但如果您希望您的appender可配置,您基本上必须在您的appender上公开属性。然后,您可以以编程方式或在配置文件中设置此属性。
UdpAppender公开了这样的属性:
public int LocalPort
{
get; set;
}
(它实际上有点复杂,因为它们会检查setter中的值是否为有效端口。)
在配置文件中,您可以像这样使用它:
<localPort value="8080" />
这对于简单类型(如string,int)非常有效,但也适用于某些复杂类型,如IPAddress
。如果你有自己的类型,那么它将更难以使它工作,我将不得不首先检查它是如何完成的。
答案 1 :(得分:1)
对于版本1.2.10,如果不修改源代码,则无法做到这一点。
相关部分位于第286行的Repository \ Hierarchy \ XmlHierarchyConfigurator.cs中:
`IAppender appender = (IAppender)Activator.CreateInstance(SystemInfo.GetTypeFromString(typeName, true, true));`
正如您所看到的,它应该使用
Activator.CreateInstance(Type, Object[])重载(或类似的方式)来满足我的需求。