Constructor 我是否可以将参数传递给自定义log4net附加器';谁的构造函数?

Constructor 我是否可以将参数传递给自定义log4net附加器';谁的构造函数?,constructor,log4net,Constructor,Log4net,我想将参数传递给自定义appender的构造函数,所以我想我必须重写appender的初始化机制。问题是,我在文档中找不到一种连接的方法,这让我觉得这是不可能的(或者文档是不完整的) 对于版本1.2.10,如果不修改源代码,这是不可能的。相关部分位于Repository\Hierarchy\XmlHierarchyConfigurator.cs:L286: IAppender appender = (IAppender)Activator.CreateInstance(SystemInfo.Ge

我想将参数传递给自定义appender的构造函数,所以我想我必须重写appender的初始化机制。问题是,我在文档中找不到一种连接的方法,这让我觉得这是不可能的(或者文档是不完整的)


对于版本1.2.10,如果不修改源代码,这是不可能的。相关部分位于
Repository\Hierarchy\XmlHierarchyConfigurator.cs:L286

IAppender appender = (IAppender)Activator.CreateInstance(SystemInfo.GetTypeFromString(typeName, true, true));
正如你所看到的,它应该使用这种超负荷(或者类似的方式)来让我实现我的需求

Activator.CreateInstance(Type, Object[])
Activator.CreateInstance(Type, Object[])
我不确定我是否理解你的目标,但是如果你想要你的appender是可配置的,你基本上必须在你的appender上公开一个属性。然后,您可以通过编程或在配置文件中设置此属性

UdpAppender公开如下属性:

public int LocalPort
{
   get; set;
}
<localPort value="8080" />
(实际上有点复杂,因为他们检查setter中的值是否为有效端口。)

在配置文件中,您可以这样使用它:

public int LocalPort
{
   get; set;
}
<localPort value="8080" />


这非常适用于简单类型,如string、int。。。但也适用于某些复杂类型,如
IPAddress
。如果您有自己的类型,那么它将更难工作,我必须首先检查它是如何工作的。

对于1.2.10版,如果不修改源代码,这是不可能的

相关部分位于Repository\Hierarchy\XmlHierarchyConfigurator.cs第286行:

`IAppender appender = (IAppender)Activator.CreateInstance(SystemInfo.GetTypeFromString(typeName, true, true));` `IAppender appender=(IAppender)Activator.CreateInstance(SystemInfo.GetTypeFromString(typeName,true,true))`
正如您所见,它应该使用Activator.CreateInstance(Type,Object[])重载(或者类似的方法)来满足我的需求。

Stefan,问题正是您在最后编写的问题:我必须提供一个在运行时实例化的复杂对象。无法通过XML配置提供。您无法基于某些参数字符串创建此类的实例?不,我必须传递另一个现有对象。可能不太好,但我认为您可以在应用程序中使用一些全局存储库(例如log4net全局上下文)。Simone和@Stefan,你的评论是一个很好的答案,请张贴他们!除非你说答案是“不可能”,否则这个“答案”似乎是关于这个问题的更多信息。。。
Activator.CreateInstance(Type, Object[])
Activator.CreateInstance(Type, Object[])