【问题标题】:Config-based Shared Libraries (DLL's)基于配置的共享库 (DLL)
【发布时间】:2009-08-20 15:19:04
【问题描述】:

我在一家拥有大量小型 ASP.Net/C# 应用程序的公司工作。我一直在努力通过为常用功能(如 Active Directory 查找、FTP 等)创建共享库来集中尽可能多的功能。

我正在尝试创建一个将执行 SMTP 交互的电子邮件 dll。我想让这个基于配置的,所以它是动态的,但我不必在每个 web.config 中放置 SMTP 服务器名称、端口等。

是否有最佳实践来制作基于配置但不依赖于每个应用的 web.config 的共享库?我也不希望它与 machine.config 绑定,因此它是可移植的。

我希望每个应用都能够调用方法而无需传入参数:

EmailLib.SendEmail("a@b.com", "This is the subject",....);

谢谢。

【问题讨论】:

    标签: c# .net asp.net web-config


    【解决方案1】:

    我想说最好的做法是将配置信息存储在每个应用的 web.config(或应用程序配置)文件中。

    如果您真的不想这样做,那么您很可能处于“自己动手”的领域。特别是,我会写一些看起来不像普通 .NET 配置文件的东西,这样以后的维护者就不会对你在做什么感到困惑。

    DLL 的配置文件总是很笨拙。一旦您希望不同的应用程序对 DLL 的配置文件具有不同的设置(这是设置首先位于配置文件中的主要原因之一),您就会遇到重大的部署、维护、源代码控制和单元测试问题对吧?)。

    一般来说,配置设置属于应用程序,而不是组件。

    【讨论】:

      【解决方案2】:

      您必须将配置存储在某处。 . .数据库可能是一种选择。类似于特定于应用程序的配置表。您可以使用反射来确定调用应用程序的名称,并使用它在数据库表中查找一行。但是那你如何配置数据库连接呢?鸡?蛋?首先?

      GW 在下面有一个好主意,但是在某些时候,您将有“硬代码”一些对所需数据的引用(配置文件,数据库连接)即使使用 web 服务,您仍然会,假设每个应用程序都可以比如从不同的域发送电子邮件,必须告诉网络服务从哪个域发送。

      【讨论】:

        【解决方案3】:

        您可以将电子邮件功能放入 Web 服务或 WCF 服务中。这会将配置设置保存在一个地方。

        【讨论】:

          【解决方案4】:

          我创建了一个“设置”库,它本质上只是一个读取/写入数据库表的名称值对库。它足够灵活,可以容纳大量数据类型并且可重用。您可以轻松地在每个其他库中实现这样的库。调用某种函数,例如:

          AgileSetting.SetSetting("EmailSubject", "All your base are belong to us");
          string emailSubject = AgileSetting.GetSetting("EmailSubject");
          

          您还可以将其提升到另一个层次并创建某种设置分组来帮助组织它们。

          【讨论】:

            【解决方案5】:

            我认为,从长远来看,无论如何您都不会想要使用一整套硬编码的东西。您所有的应用程序可能会有不同的电子邮件地址来获得支持,并且可能希望使用不同的主题(对问题进行正确描述,而不是通用的“foo-corp 应用程序错误”)。

            但至于一般问题,你可以有一个“.properties”文件,通用 NAnt 构建将以某种方式适当地处理。

            【讨论】:

              【解决方案6】:

              我个人更喜欢创建从存储在 IOC 容器中的外部文件(例如 xml、dsl)填充的配置类,然后注入到使用它的服务中。这个过程在这里描述得很好configuration in conjunction with an IOC container

              这样做的好处是我可以在每台服务器上有多个配置,并且只需将配置注入到我的单元测试类中。再加上一切都是强类型的,所以一旦应用程序启动,我应该担心将整数转换为字符串或任何东西。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2011-11-12
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2010-09-28
                • 2013-08-10
                • 1970-01-01
                • 2019-08-23
                相关资源
                最近更新 更多