如何有效管理ASP.NET应用程序中众多DLL的独立配置分离策略?

2026-03-30 12:591阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计599个文字,预计阅读时间需要3分钟。

如何有效管理ASP.NET应用程序中众多DLL的独立配置分离策略?

为每个DLL创建设置后,将生成.dll.config文件。如果该DLL是asp.net应用程序的一部分,如何为每个DLL分别保持这些配置,且不将其合并到web.config中?

例如:我有一个GMailSender类库(DLL),它通过进行配置。

为每个dll创建设置后,将生成.dll.config文件.如果该dll是asp.net应用程序的一部分,如何为每个dll分别保持这些配置,并且不将它们合并到web.config中?

例:
我有一个GMailSender类库(DLL),它通过GMail服务器发送电子邮件.您只需要一个GMailSender实例,如下所示:

GMailSender gms = new GMailSender(); gms.To = "myfriend@yahoo.com"; gms.Subject = "System.Configuration dilemma"; gms.Body = "Can anyone help me with this question ?"; gms.Send();

考虑GMailSender在GMailSender.dll中,它的配置文件是GMailSender.dll.config,其中包含GMail帐户的用户名和密码.

我希望这个DLL使用自身的配置文件(在同一目录中的dll和config,即在ASP.NET应用程序的Bin文件夹中)或桌面应用程序旁边.通过这种方式,GMailSender独立于谁正在使用他来检索它的配置(当前已加载此DLL的AppDomain).

我想要这个而不重建轮子(没有自定义配置类).我猜它可能与System.Configuration,但这个命名空间可能是最糟糕的.NET设计!

请不要告诉你为什么设计这样……

这是一个基于插件的设计,最后MEF现在在.NET 4.0中做了某种,但是部件配置存在同样的问题.至少MEF我不再需要争论基于插件的设计优势了.

您可以使用自定义配置部分实现所需.此 MSDN article提供了有关如何实现此类配置节的一些详细信息和示例.

如果您需要简单的键/值配置,例如appSettings部分,那么创建自定义配置部分非常简单.

您需要做的第一件事是在web.config中定义您的配置部分:

<configSections> <section name="GmailSettings" restartOnExternalChanges="true" type="System.Configuration.NameValueFileSectionHandler" /> </configSections>

现在,在web.config文件中,您可以声明GmailSettings部分并设置您将用于该设置的外部配置文件的位置:

<GmailSettings configSource="GmailSettings.config"></GmailSettings>

configSource指定用于定义GmailSettings部分的外部配置文件的名称和位置.请注意定义节时使用的restartOnExternalChanges属性.如果您希望在修改GmailSettings.config文件时自动重新启动应用程序(就像修改web.config文件时那样),请将其设置为true.

以下是如何实施GmailSettings.config文件的示例:

如何有效管理ASP.NET应用程序中众多DLL的独立配置分离策略?

<?xml version="1.0"?> <GmailSettings> <add key="userName" value="blabla"/> <add key="password" value="moreBla"/> </GmailSettings>

您可以使用ConfigurationManager.GetSection()方法或通过实现如下所示的帮助程序类来访问GmailSettings中的设置:

public class GmailSettings { private static readonly GmailSettings _instance = new GmailSettings(); private NameValueCollection _settings = ConfigurationManager.GetSection("GmailSettings") as NameValueCollection; public static GmailSettings Instance { get { return _instance; } } public string this[string key] { get { return _settings[key]; } } }

现在可以像GmailSettings.Instance [“userName”]一样访问这些设置.

希望这可以帮助.

本文共计599个文字,预计阅读时间需要3分钟。

如何有效管理ASP.NET应用程序中众多DLL的独立配置分离策略?

为每个DLL创建设置后,将生成.dll.config文件。如果该DLL是asp.net应用程序的一部分,如何为每个DLL分别保持这些配置,且不将其合并到web.config中?

例如:我有一个GMailSender类库(DLL),它通过进行配置。

为每个dll创建设置后,将生成.dll.config文件.如果该dll是asp.net应用程序的一部分,如何为每个dll分别保持这些配置,并且不将它们合并到web.config中?

例:
我有一个GMailSender类库(DLL),它通过GMail服务器发送电子邮件.您只需要一个GMailSender实例,如下所示:

GMailSender gms = new GMailSender(); gms.To = "myfriend@yahoo.com"; gms.Subject = "System.Configuration dilemma"; gms.Body = "Can anyone help me with this question ?"; gms.Send();

考虑GMailSender在GMailSender.dll中,它的配置文件是GMailSender.dll.config,其中包含GMail帐户的用户名和密码.

我希望这个DLL使用自身的配置文件(在同一目录中的dll和config,即在ASP.NET应用程序的Bin文件夹中)或桌面应用程序旁边.通过这种方式,GMailSender独立于谁正在使用他来检索它的配置(当前已加载此DLL的AppDomain).

我想要这个而不重建轮子(没有自定义配置类).我猜它可能与System.Configuration,但这个命名空间可能是最糟糕的.NET设计!

请不要告诉你为什么设计这样……

这是一个基于插件的设计,最后MEF现在在.NET 4.0中做了某种,但是部件配置存在同样的问题.至少MEF我不再需要争论基于插件的设计优势了.

您可以使用自定义配置部分实现所需.此 MSDN article提供了有关如何实现此类配置节的一些详细信息和示例.

如果您需要简单的键/值配置,例如appSettings部分,那么创建自定义配置部分非常简单.

您需要做的第一件事是在web.config中定义您的配置部分:

<configSections> <section name="GmailSettings" restartOnExternalChanges="true" type="System.Configuration.NameValueFileSectionHandler" /> </configSections>

现在,在web.config文件中,您可以声明GmailSettings部分并设置您将用于该设置的外部配置文件的位置:

<GmailSettings configSource="GmailSettings.config"></GmailSettings>

configSource指定用于定义GmailSettings部分的外部配置文件的名称和位置.请注意定义节时使用的restartOnExternalChanges属性.如果您希望在修改GmailSettings.config文件时自动重新启动应用程序(就像修改web.config文件时那样),请将其设置为true.

以下是如何实施GmailSettings.config文件的示例:

如何有效管理ASP.NET应用程序中众多DLL的独立配置分离策略?

<?xml version="1.0"?> <GmailSettings> <add key="userName" value="blabla"/> <add key="password" value="moreBla"/> </GmailSettings>

您可以使用ConfigurationManager.GetSection()方法或通过实现如下所示的帮助程序类来访问GmailSettings中的设置:

public class GmailSettings { private static readonly GmailSettings _instance = new GmailSettings(); private NameValueCollection _settings = ConfigurationManager.GetSection("GmailSettings") as NameValueCollection; public static GmailSettings Instance { get { return _instance; } } public string this[string key] { get { return _settings[key]; } } }

现在可以像GmailSettings.Instance [“userName”]一样访问这些设置.

希望这可以帮助.