如何为通用对象配置Log4Net自定义对象渲染器?

时间:2011-07-27 12:19:43

标签: generics log4net

我有一个通用对象:MyGenericObject(T),如何在配置文件中的log4net中注册custom renderer?例如,如果这是一个普通对象,则可以使用以下方法:

<renderer renderingClass="MyObjectRenderer, MyClassLibrary" renderedClass="MyObject, MyClassLibrary" />

但是我不知道如何为Generics写这个,我尝试了这个:

<renderer renderingClass="MyObjectRenderer, MyClassLibrary" renderedClass="MyObject(Of MyNonGenericObject), MyClassLibrary" />

但发生了这种情况:

log4net:ERROR XmlHierarchyConfigurator: Could not find class [MyObject(Of MyNonGenericObject), MyClassLibrary].
System.TypeLoadException: Could not load type 'MyObject(Of MyNonGenericObject)' from assembly 'MyClassLibrary'.

有没有人对如何实现我想要的东西有更好的想法?

1 个答案:

答案 0 :(得分:1)

您在XML文件MyObject(Of MyNonGenericObject)中使用的语法特定于VB .NET,就像MyObject<MyNonGenericObject>特定于C#一样。

您将声明更改为使用与语言无关的CLR类型语法:

MyObject`1[[MyNonGenericObject, MyClassLibrary]], MyClassLibrary

1`表示类型参数的数量。)

所以该行将是:

<renderer renderingClass="MyObjectRenderer, MyClassLibrary" renderedClass="MyObject`1[[MyNonGenericObject, MyClassLibrary]], MyClassLibrary" />