如何为通用对象配置Log4Net自定义对象呈现器? [英] How to Configure Log4Net Custom Object Renderer for Generic Objects?

查看:147
本文介绍了如何为通用对象配置Log4Net自定义对象呈现器?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个通用对象:MyGenericObject(T),如何注册自定义渲染器在log4net的配置文件中?例如,如果这是一个普通的对象,那么下面的代码就可以工作了:

 < renderer renderingClass =MyObjectRenderer,MyClassLibraryrenderedClass = MyObject,MyClassLibrary/> 

但是我不知道如何为泛型编写这个代码,我试过这个:

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

但发生这种情况:

  log4net:ERROR XmlHierarchyConfigurator:找不到类[MyObject(Of MyNonGenericObject),MyClassLibrary]。 
System.TypeLoadException:无法从程序集'MyClassLibrary'中加载'MyObject(Of MyNonGenericObject)'类型。

有没有人有更好的想法来实现我想要的功能?

解决方案在XML文件中使用的语法< .NET,就像 MyObject< MyNonGenericObject> 是特定于C#的。



您将声明更改为使用language-独立的CLR类型语法:

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

1

所以这一行将是:

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


I have a generic object: MyGenericObject(of T), how do I register a custom renderer in log4net in the config file? For example, if this was a normal object the following would work:

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

However I don't know how to write this for Generics, I attempted this:

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

but this happened:

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

Does anyone have any better ideas on how to achive what I want?

解决方案

The syntax you are using in XML file, MyObject(Of MyNonGenericObject), is specific to VB .NET, just like MyObject<MyNonGenericObject> is specific to C#.

You change your declaration to use language-independent CLR type syntax:

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

(1 after ` indicates the number of type parameters.)

So the line will be:

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

这篇关于如何为通用对象配置Log4Net自定义对象呈现器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆