如何使用 EL 仅为大型系统的一个子系统(例如 DLL(指定跟踪侦听器和格式化程序?
我正在编写一个非常大的应用程序(胖客户端,而不是 Web 应用程序(的子模块,它使用网关/门户模型来加载其各种子系统。 我想使用 EL 5.0(已在使用(来管理日志记录/跟踪配置,但仅适用于我的子系统。 看起来app.config正在被VS转换为foo.dll.config。 我能否说服 EL 选取 foo.dll.config 中的设置(在运行时(并将它们合并到内存中的现有配置数据中? (不放入合并的配置文件中。
(看起来,基于企业库类库 App.Config,它无法完成。
我不建议尝试合并配置 - 它可能会变得混乱。
相反,我会配置您的子模块以配置和使用对所需相应企业库对象的私有引用。
我假设您的模块是一个具有 app.config 的类库。 编译时,它会在输出目录中生成一个模块.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 文件与程序集一起部署。 如果企业资源库存在版本问题(例如,您使用的是版本 6,而应用程序使用的是版本 5(,您也可能遇到问题。