在运行时从web.config获取枚举值

时间:2011-11-16 08:23:32

标签: c# asp.net

我有一个枚举,我想在运行时从web.config获取。 我开始阅读有关构建提供程序的内容,但这似乎适用于类。 有人能指出我的一个例子,或者至少指出我正确的方向。

现在我在web.config中有一个逗号分隔的值列表,这不是类型安全的,容易出错。

如果有另一种方法来获得这种“动态枚举”,我会接受其他想法。

谢谢!

3 个答案:

答案 0 :(得分:27)

您可以使用ConfigurationManager并将值转换为枚举:

<configuration> 
  <appSettings>
    <add key="YourEnum" value="BlueSky" />  
  </appSettings>
</configuration>

string configValue = ConfigurationManager.AppSettings["YourEnum"];
YourEnumType value = (YourEnumType)Enum.Parse(typeof(YourEnumType), configValue ); 

答案 1 :(得分:0)

如果我是你,那么我会设计自己的Enum课程。这样,您就可以将其序列化为XML或在运行时构建它。它还可以确保您仍然具有类型安全性。

通常,数据将存储在类中的字典类型或键/值对列表中。然后,您可以在配置文件中存储值列表(查看如何读取列表数据)

看看here以获得一些想法。

答案 2 :(得分:0)

Microsoft.Extensions.Configuration将反序列化存储在JSON字符串中的枚举,这是解决此问题的好方法。

例如:

public enum Format
{
    UNKNOWN = 0,
    PNG,
    JPEG
}

public class ImageOptions
{
    /* List of supported file types */
    public List<Format> SupportedFileTypes { get; set; }
}
/* Options config dict */
public static Dictionary<string, string> DefaultImageServiceConfigDict = new Dictionary<string, string>
{
    /* Image Options NOTE: Enums stored as strings!! */
    {"ImageServiceOptions:SupportedFileTypes:0", "png"},
    {"ImageServiceOptions:SupportedFileTypes:1", "jpeg"},
};

/* Read options */
var builder = new ConfigurationBuilder();
builder.AddInMemoryCollection(DefaultImageServiceConfigDict);
configuration = builder.Build();

/* Parses config, including enum deserialisation by name */
imageConfig = config.GetSection(nameof(ImageOptions)).TryGet<ImageServiceOptions();