English 中文(简体)
. Net 库可识别运行时的呼叫班吗?
原标题:Can a .Net library identify calling classes at runtime?
  • 时间:2012-05-28 14:08:27
  •  标签:
  • c#
  • .net

我有一个伐木图书馆, 提供了一个图形用户界面, 允许终端用户逐级启用/ 禁用伐木。 这样可以让支持用户使用终端用户, 从而在解决问题时能够按利益类别进行伐木, 而不用我们并不关心的垃圾淹没日志( 这一点还要多一点, 但对于这个问题来说就足够了 ) 。 图形用户界面必须列出使用日志库的所有分类 。

过去(在Win32 Apps)我曾使用的方法是提供一个注册功能,让图书馆的用户调用该功能来列出使用图书馆的分类。这个功能有效,但痛苦和错误容易发生。鉴于我现在在.NET工作,我希望自己能在运行时获得这些分类的清单,这样我就可以在不需要注册的情况下填充图形用户界面。

有办法做到这一点吗?

问题回答

当我们进行日志时, 每个想要日志的类会为其类型创建一个静态的日志实例。 您可以通过这个方法跟踪每个实例, 并允许用户根据需要禁用日志 。

private static readonly ILog LOG = LogManager.GetLog(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

然而,这自然不会被解雇, 直到该类静态成员被加载(我想当首次访问该类/类型时), 所以我想你可能不会看到完整列表的类别,

您可以创建一个新的 < a href=>" "http://msdn.microsoft.com/ en-us/library/ system. diagnostics. stacktrace.aspx" rel = "nofollow" > StackTrace (这不仅是为了例外报告), 但它并不很迅速...

您可以使用 < a href=" "http://msdn.microsoft.com/ en- us/library/ms 17313/%28v=vs. 100%29.aspx" rel=“ nofollow”>reflection 。 列出当前装入的所有类( 和支架) 的下列代码 :

foreach(Assembly asm in AppDomain.CurrentDomain.GetAssemblies()
   foreach(Type type in asm.GetTypes()){   

   } 
}

< a href=> http://msdn.microsoft.com/ en- us/library/ system. appdomain. getassemblies.aspx" rel=“nofollow” >AppDopmain.CurrentDomain.GetAssemblies () 将列出在应用程序域内装入的所有组装,然后使用 < a href= > http://msdn.microsoft.com/ en-us/library/ systems.reflection.assembly. gettyms.aspx" rel=“nofolfollow” > GetTypes () 列出组装组装的所有类和构件。

4.5 - 简单。在所谓的方法中添加所需信息作为参数,对信息进行注释,其余由汇编者完成。

http://www.wintelect.com/cs/blogs/jgarland/archive/2012/03/05/using-the-new-callerinfo-atitributes-for-reliable-property-change-noficifics.aspx 有更多信息。

看起来像这个: 私人空隙 OnProperty Changed ([ [Caller memberName] 字符串呼叫器= null)

Sadly 没有类名 ;) 所以,也因为运气好。

- 否则,没有快速可靠的方式,对不起。

允许/禁用逐类记录。

我所做的是有一个 A 类( Logger) 的通用日志( Logger) 。 这是针对错误的, 但它也允许我手动为另一类的日志 -- -- 以辅助器方法排出( exampüle) -- -- 登录。 尽可能好和 QUITE 标准( nlog 有类似的机制 ) 。





相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

热门标签