如何使用EL为大型系统的一个子系统(比如DLL)指定跟踪侦听器和格式化程序?
我正在编写一个非常大的大型应用程序(胖客户端,而不是Web应用程序)的子模块,它使用网关/门户模型来加载其各种子系统。我想使用EL 5.0(已经在使用中)来管理日志记录/跟踪配置,但仅限于我的子系统。看起来app.config正在被VS转换为foo.dll.config。我可以说服EL在foo.dll.config中获取设置(在运行时)并将它们合并到内存中的现有配置数据中吗? (不是合并的配置文件。)
(看起来,基于Enterprise Library Class Library App.Config,无法完成。)
答案 0 :(得分:1)
我不建议尝试合并配置 - 它可能会变得混乱。
相反,我会配置您的子模块来配置和使用您需要的相应Enterprise Library对象的私有引用。
我假设你的模块是一个有app.config的类库。编译时,它会在输出目录中生成一个module.dll.config文件。举一个使用Enterprise Library 6进行日志记录的例子,我将创建一个帮助程序类来加载您自己的配置并维护对模块的LogWriter的引用。通过这种方式,您的模块可以加载自己的配置,不会干扰,也不会受到应用程序中其他配置的影响。
namespace MyModule
{
public class MyModuleClass
{
public void DoSomething()
{
MyModuleLogger.LogWriter.Write("MyModule Test", "General");
}
}
public static class MyModuleLogger
{
private static Lazy<LogWriter> logWriter = new Lazy<LogWriter>(() =>
{
FileConfigurationSource configSource =
new FileConfigurationSource("MyModule.dll.config");
LogWriterFactory factory = new LogWriterFactory(configSource);
return factory.Create();
});
public static LogWriter LogWriter
{
get { return logWriter.Value; }
}
}
}
我使用过静态类,但你可以使用各种适合你设计的方法(单身,工厂等)。
您必须确保将dll.config文件与程序集一起部署。如果Enterprise Library存在版本问题,您也可能遇到问题(例如,当应用程序使用版本5时,您使用的是版本6)。