如何使用企业库仅为一个DLL或子系统指定配置?

如何使用企业库仅为一个DLL或子系统指定配置?,dll,app-config,enterprise-library,Dll,App Config,Enterprise Library,如何使用EL为大型系统的一个子系统(比如DLL)指定跟踪侦听器和格式化程序 我正在编写一个非常大的应用程序(厚客户端,而不是web应用程序)的子模块,该应用程序使用网关/门户模型加载其各个子系统。我想使用EL 5.0(已经在使用)来管理日志记录/跟踪配置,但只针对我的子系统。看起来app.config正在被VS转换为foo.dll.config。我能否说服EL在foo.dll.config(运行时)中选择设置,并将它们合并到内存中现有的配置数据中?(未合并到合并的配置文件中。) (看起来,基于,

如何使用EL为大型系统的一个子系统(比如DLL)指定跟踪侦听器和格式化程序

我正在编写一个非常大的应用程序(厚客户端,而不是web应用程序)的子模块,该应用程序使用网关/门户模型加载其各个子系统。我想使用EL 5.0(已经在使用)来管理日志记录/跟踪配置,但只针对我的子系统。看起来app.config正在被VS转换为foo.dll.config。我能否说服EL在foo.dll.config(运行时)中选择设置,并将它们合并到内存中现有的配置数据中?(未合并到合并的配置文件中。)


(看起来,基于,它无法完成。)

我不建议尝试合并配置——它可能会变得混乱

相反,我将配置您的子模块,以配置和使用对您需要的适当企业库对象的私有引用

我假设您的模块是一个具有app.config的类库。编译时,它会在输出目录中生成module.dll.config文件。以使用Enterprise Library 6进行日志记录为例,我将创建一个helper类来加载您自己的配置并维护对模块LogWriter的引用。通过这种方式,您的模块加载自己的配置,不会干扰应用程序中的其他配置,也不会受其影响

名称空间MyModule
{
公共类MyModuleClass
{
公共无效剂量测定法()
{
MyModuleLogger.LogWriter.Write(“mymoduletest”、“General”);
}
}
公共静态类MyModuleLogger
{
private static Lazy logWriter=new Lazy(()=>
{
FileConfigurationSource配置源=
新的FileConfigurationSource(“MyModule.dll.config”);
LogWriterFactory工厂=新LogWriterFactory(configSource);
返回factory.Create();
});
公共静态日志编写器日志编写器
{
获取{返回logWriter.Value;}
}            
}
}
我使用了一个静态类,但您可以使用各种适合您的设计的方法(单例、工厂等)


您必须确保dll.config文件与程序集一起部署。如果Enterprise Library存在版本问题,您也可能会遇到问题(例如,您使用的是版本6,而应用程序使用的是版本5)。

非常漂亮,谢谢。我在发帖后继续进行研究(我知道,罪犯发帖时会进行全面研究),结果发现:。这让我觉得我可能想尝试从一个用FileConfigurationSource初始化的工厂对日志编写器的私有引用。非常感谢你确认我走上了正确的道路。通过lambda函数习惯用法进行惰性初始化!我以前没见过。(我们使用的是EL 5.0.505.0。)