0

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

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

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

4

1 回答 1

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

于 2013-10-01T05:47:22.450 回答