【问题标题】:Postsharp and NLog, general design questionPostsharp 和 NLog,一般设计问题
【发布时间】:2009-08-14 12:24:31
【问题描述】:

这是我打算做的:

  1. 我想编写一个面向方面的 NLog 特定 onmethodexecutionaspect 类。
  2. 但我仍然想确保调用代码使用通用属性类进行属性化,该属性类将在内部加载 NLog 或 TraceX 等特定于方法执行方面的实现,具体取决于应用程序配置文件中指定的内容。

解决这个问题的最佳方法是什么?

我正在考虑编写一个派生自 postsharp 方法执行方面的抽象类。 然后我将有另一个 dll,它将有一个特定于 NLog 的实现......所以它将有一个类,该类将派生自我在通用 dll 中创建的通用方法执行方面类。

消费代码将仅引用我编写的通用类 dll,如果这是应用程序配置中指定的内容,该类将加载我编写的 NLog 特定 dll。

有意义吗?

【问题讨论】:

    标签: postsharp nlog


    【解决方案1】:

    我认为你在正确的轨道上。 但是,请尝试改用 OnMethodBoundaryAspect。它在运行时比 OnMethodInvocationAspect 更快。

    尽量利用编译时初始化 (CompileTimeInitialize) 和运行时初始化 (RunTimeInitialize) 并避免在处理程序中做任何代价高昂的事情。

    【讨论】:

    • 谢谢盖尔。只是需要更多关于我想到的方法的帮助......你认为我应该把代码放在哪里来做一些特定的事情?它会在通用类的静态构造函数中(来自 OnMethodBoundaryAspect 的派生词)。我问这个是因为我想确保在每次调用从 OnMethodBoundaryAspect 重新划分的类时都不会加载 Nlog 内容,并且每个应用程序只有一次,该应用程序的类装饰有从 OnMethodBoundaryAspect 派生的通用类。
    • 您可以使用静态构造函数,但请确保不要在 PostSharp 运行时初始化您的日志框架(请参阅 PostSharpEnvironment.IsPostSharpRunning)。当您想要初始化依赖于方面目标的元数据(类名、方法名)的内容时,请使用 RuntimeInitialize。例如,如果您需要初始化名称为目标类型名称的跟踪类别,则 RuntimeInitialize 是正确的位置。 -盖尔
    • 谢谢。我将参考该 API,然后再与您联系以获得更多说明。
    • 我从事这项工作时的一个相关问题...我可以将 PostSharp 与“Common.Logging”库一起使用吗?你知道这方面有什么有用的建议吗?
    • 我问这个是因为我想充分利用这两个工具 - 即 common.logging 为我提供一个使用多个记录器进行日志记录的通用接口,以及 PostSharp 为我提供方面。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    相关资源
    最近更新 更多