如何使用Enterprise Library仅为一个DLL或子系统指定配置?

时间:2013-09-30 17:23:43

标签: dll app-config enterprise-library

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

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

(看起来,基于Enterprise Library Class Library App.Config,无法完成。)

1 个答案:

答案 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)。