服务库中的强类型设置 class 从 mvc 项目中的 web.config 获取设置
Strongly typed Settings class in a services library getting settings from web.config in mvc project
我有一个包含多个项目的解决方案。其中之一是服务项目,我的大部分后端代码都驻留在该项目中,因此,大多数服务的设置都驻留在其 app.config 文件中。
我创建了一个 class 来访问所有这些设置,因此它们可以在服务项目之外使用。
public static class ServicesAppSettings
{
/// <summary>
/// Simple App Settings classes for strong typing
/// When creating a new class please ENSURE THAT THE PROPERTY NAME EXACTLY MATCHES THE APPSETTINGS KEY!
/// </summary>
public static class SmsSettings
{
public static string SmsProvider => ConfigurationManager.AppSettings["SmsProvider"];
public static string SmsAccountId => ConfigurationManager.AppSettings["SmsAccountId"];
public static string SmsPassword => ConfigurationManager.AppSettings["SmsAccountPassword"];
public static string SmsFromPhone => ConfigurationManager.AppSettings["SmsFromPhone"];
}
public static class EmailSettings
{
public static string EmailProvider => ConfigurationManager.AppSettings["EmailProvider"];
public static string EmailProviderHost => ConfigurationManager.AppSettings["EmailProviderHost"];
public static string EmailAccount => ConfigurationManager.AppSettings["EmailAccount"];
public static string EmailAccountPassword => ConfigurationManager.AppSettings["EmailAccountPassword"];
public static string GetEmailAddressFromApplication()
{
return string.Format(EmailAccount + "@" + EmailProvider);
}
}
public static class UserIcons
{
public static string MaleUserIconSource => ConfigurationManager.AppSettings["MaleUserIcon"];
public static string FemaleUserIconSource => ConfigurationManager.AppSettings["FemaleUserIcon"];
}
}
它工作得很好,除非设置不在 WEB.CONFIG 文件中。为什么这个绘图来自 mvc 的 web.config 文件而不是它自己的库 app.config 文件。相信我,情况就是这样。如果我从 web.config 中删除一个设置,然后尝试在测试中访问它,它是空的,如果我把它放回 web.config,它就可以工作。
有人知道这是为什么吗?您可以向 ConfigurationManager 指定要从中检索的文件的名称吗?
发生这种情况是因为实际上只有一个配置文件可访问 - 您的可执行项目的配置。这就是为什么在 mvc 应用程序中您可以从可执行 mvc 应用程序的 web.config
读取设置。如果您有服务应用程序(ms 服务),它将是您启动服务的 app.config
。
据我所知,您无法从另一个配置文件中读取设置。
一种可能的解决方案是将您的自定义设置存储在 .xml
文件中并读取它。如果您想在运行时更改自定义设置,这也很有用。
另一个(如果您不想弄乱 appSettings
部分中的设置)是创建您的自定义配置部分并将其用于您的设置
希望对您有所帮助
Web.config 是放置设置的地方。作为 .net Web 解决方案一部分的 DLL 将使用它。
我有一个包含多个项目的解决方案。其中之一是服务项目,我的大部分后端代码都驻留在该项目中,因此,大多数服务的设置都驻留在其 app.config 文件中。
我创建了一个 class 来访问所有这些设置,因此它们可以在服务项目之外使用。
public static class ServicesAppSettings
{
/// <summary>
/// Simple App Settings classes for strong typing
/// When creating a new class please ENSURE THAT THE PROPERTY NAME EXACTLY MATCHES THE APPSETTINGS KEY!
/// </summary>
public static class SmsSettings
{
public static string SmsProvider => ConfigurationManager.AppSettings["SmsProvider"];
public static string SmsAccountId => ConfigurationManager.AppSettings["SmsAccountId"];
public static string SmsPassword => ConfigurationManager.AppSettings["SmsAccountPassword"];
public static string SmsFromPhone => ConfigurationManager.AppSettings["SmsFromPhone"];
}
public static class EmailSettings
{
public static string EmailProvider => ConfigurationManager.AppSettings["EmailProvider"];
public static string EmailProviderHost => ConfigurationManager.AppSettings["EmailProviderHost"];
public static string EmailAccount => ConfigurationManager.AppSettings["EmailAccount"];
public static string EmailAccountPassword => ConfigurationManager.AppSettings["EmailAccountPassword"];
public static string GetEmailAddressFromApplication()
{
return string.Format(EmailAccount + "@" + EmailProvider);
}
}
public static class UserIcons
{
public static string MaleUserIconSource => ConfigurationManager.AppSettings["MaleUserIcon"];
public static string FemaleUserIconSource => ConfigurationManager.AppSettings["FemaleUserIcon"];
}
}
它工作得很好,除非设置不在 WEB.CONFIG 文件中。为什么这个绘图来自 mvc 的 web.config 文件而不是它自己的库 app.config 文件。相信我,情况就是这样。如果我从 web.config 中删除一个设置,然后尝试在测试中访问它,它是空的,如果我把它放回 web.config,它就可以工作。
有人知道这是为什么吗?您可以向 ConfigurationManager 指定要从中检索的文件的名称吗?
发生这种情况是因为实际上只有一个配置文件可访问 - 您的可执行项目的配置。这就是为什么在 mvc 应用程序中您可以从可执行 mvc 应用程序的 web.config
读取设置。如果您有服务应用程序(ms 服务),它将是您启动服务的 app.config
。
据我所知,您无法从另一个配置文件中读取设置。
一种可能的解决方案是将您的自定义设置存储在 .xml
文件中并读取它。如果您想在运行时更改自定义设置,这也很有用。
另一个(如果您不想弄乱 appSettings
部分中的设置)是创建您的自定义配置部分并将其用于您的设置
希望对您有所帮助
Web.config 是放置设置的地方。作为 .net Web 解决方案一部分的 DLL 将使用它。