我有一个枚举,我想在运行时从web.config获取。 我开始阅读有关构建提供程序的内容,但这似乎适用于类。 有人能指出我的一个例子,或者至少指出我正确的方向。
现在我在web.config中有一个逗号分隔的值列表,这不是类型安全的,容易出错。
如果有另一种方法来获得这种“动态枚举”,我会接受其他想法。
谢谢!
答案 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();