基于配置的共享库(DLL的)
我在一家公司工作,我们有很多小的ASP.Net/C#应用程序。我一直在努力通过为常见功能(如Active Directory查找,FTP等)创建共享库尽可能多地集中功能。基于配置的共享库(DLL的)
我试图创建一个电子邮件DLL,将执行SMTP交互。我想使这个基于配置的,所以它是动态的,但我不必在每个web.config中放置一个SMTP服务器名称,端口等。
是否有一个最佳做法,使基于配置的共享库,但不依赖于每个应用程序的web.config?我也不希望它绑定到machine.config,因此它是可移植的。
我希望每个应用能够调用方法,而不必在参数传递:
EmailLib.SendEmail("[email protected]", "This is the subject",....);
感谢。
您必须在某处存储配置。 。 。数据库可能是一个选项。就像应用程序特定的配置表一样。您可以使用反射来确定调用应用程序的名称,并使用它来查找数据库表中的一行。但是,如何配置数据库连接?鸡?蛋?第一?
GW在下面有一个好主意,但是在某些时候你会有一些对你需要的数据(配置文件,数据库连接)的引用“硬编码”即使有了web服务,你仍然会假设每个应用程序都会做一些事情就像发送来自不同域的电子邮件一样,必须告诉web服务从哪个域发送。
您可以将您的电子邮件功能放入Web服务或WCF服务中。这将保持配置设置在一个地方。
我创建了一个“设置”库,它基本上只是一个读取/写入数据库表的namevaluepair库。它足够灵活以容纳大量数据类型并且可重用。您可以在其他每个库中轻松实现这样的库。调用某种功能,如:
AgileSetting.SetSetting("EmailSubject", "All your base are belong to us");
string emailSubject = AgileSetting.GetSetting("EmailSubject");
你也可以把它带到另一个层次,并建立某种形式的设置分组,以帮助组织他们。
我认为,从长远来看,你不会想要使用一整套硬编码的东西。所有的应用程序可能会有不同的电子邮件地址以获得支持,并且可能希望使用不同的主题(以便对问题进行正确描述,而不是通用的“foo-corp应用程序错误”)。
但是就一般问题而言,你可以有一个'.properties'文件,通用的NAnt构建将以某种方式进行适当的处理。
我想说的最佳做法是将配置信息存储在每个应用程序的web.config(或应用程序配置)文件中。
如果你真的不想这样做,你很可能在“滚动你自己的”领土。特别是,我会写一些看起来不像普通.NET配置文件的东西,以便将来的维护人员不会对你正在做的事情感到困惑。
DLL的配置文件总是很尴尬。只要您希望不同的应用程序对DLL的配置文件有不同的设置(这是设置在配置文件中的首要原因之一),就会遇到重要的部署,维护,源代码管理和单元测试问题, 对?)。
通常,配置设置属于应用程序,而不属于组件。
我的peronally更喜欢创建配置类,这些配置类是从存储在IOC容器中的外部文件(例如xml,dsl)填充,然后注入到正在使用它的服务中。这个过程在这里描述得很好configuration in conjunction with an IOC container
这样做的好处是我可以有多个配置每个服务器,并且只需将配置注入到我的单元测试的类中。另外一切都是强类型的,所以我应该担心在应用程序启动时将ints转换为字符串或任何东西。