服务库中的强类型设置 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 将使用它。