【问题标题】:How do I use Enterprise Library to specify config for only one DLL or subsystem?如何使用 Enterprise Library 为一个 DLL 或子系统指定配置?
【发布时间】:2013-10-06 15:59:33
【问题描述】:
如何使用 EL 为大型系统的一个子系统(例如 DLL)指定跟踪侦听器和格式化程序?
我正在编写一个非常大的应用程序(厚客户端,而不是 Web 应用程序)的子模块,该应用程序使用网关/门户模型来加载其各种子系统。我想使用 EL 5.0(已经在使用)来管理日志记录/跟踪配置,但仅适用于我的子系统。看起来 app.config 正在被 VS 转换为 foo.dll.config。我可以说服 EL 获取 foo.dll.config 中的设置(在运行时)并将它们合并到内存中的现有配置数据中吗? (不在合并的配置文件中。)
(看起来,基于Enterprise Library Class Library App.Config,是做不到的。)
【问题讨论】:
标签:
dll
app-config
enterprise-library
【解决方案1】:
我不建议尝试合并配置——它可能会变得混乱。
相反,我会将您的子模块配置为配置和使用对您需要的适当企业库对象的私有引用。
我假设您的模块是一个具有 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 文件与您的程序集一起部署。如果企业库存在版本问题(例如,您使用的是版本 6,而应用程序使用的是版本 5),您也可能会遇到问题。