服务库中强类型的Settings类,从mvc project

时间:2015-12-30 20:01:41

标签: c# configuration-files

我有一个包含多个项目的解决方案。其中一个是Services项目,其中大部分后端代码都驻留在其中,因此大多数服务的设置都位于其app.config文件中。

我创建了一个类来访问所有这些设置,因此它们可以在Services项目之外使用。

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中删除一个设置,然后尝试在测试中访问它,那么它是null,如果我把它放回web.config中就可以了。

任何人都知道这是为什么?您能否在ConfigurationManager中指定要从中检索的文件的名称?

2 个答案:

答案 0 :(得分:1)

之所以发生这种情况是因为实际上只能访问一个配置文件 - 可执行项目的配置。这就是为什么在mvc应用程序中,您可以从可执行mvc应用程序的web.config中读取设置。如果你有服务应用程序(ms服务),它将是你启动服务的app.config

据我所知,您无法从其他配置文件中读取设置。

一种可能的解决方案是将您的自定义设置存储在.xml文件中并阅读它。如果要在运行时更改自定义设置,这也很有用。

另一个(如果您不想弄乱appSettings部分中的设置)是创建自定义配置部分并将其用于您的设置

希望有所帮助

答案 1 :(得分:0)

Web.config是放置设置的地方。作为.net Web解决方案一部分的Dll将使用它。