【问题标题】:C# automapper check all enum values are in mapC# automapper 检查所有枚举值是否在地图中
【发布时间】:2019-06-11 10:48:45
【问题描述】:

我正在从我的域模型映射到 databaseDto。两者都持有一个代表一系列状态的枚举。

一旦映射器从其配置构建(或者可能在单元测试中),是否可以使用自动映射器映射一个枚举中的所有值

【问题讨论】:

  • 您是否尝试在 automapper 中查看自定义解析器?
  • 你有什么办法解决这个问题?您是否看过如何枚举枚举的值?这不只是一个简单的foreach(possibleEnumValue) CheckThatItDoesntBlowUp(); 解决方案吗?
  • 有一个使用Mapper.AssertConfigurationIsValid() afaik 的配置的内置断言,但是如果没有所有可能的输入值,在服务启动期间自然会不知道,你怎么可能检查它。
  • 编辑了问题以使其更清晰。在从其配置构建映射器之后,我想检查所有枚举值是否可以被映射。

标签: c# automapper


【解决方案1】:

您可以使用下面的示例代码;

    public class Program
    {
        public static void Main(string[] args)
        {
            CreateMaps();

            Lender src = new Lender()
            {
                Id = 1,
                Name = "Bob",
                ClaimTypes = ClaimType.A | ClaimType.C
            };

            LenderServiceModel dest = Mapper.Map<LenderServiceModel>(src);

            Console.WriteLine("{0}: {1}", dest.Id, dest.Name);

            foreach(var claimType in dest.ClaimTypes)
            {
                Console.WriteLine(claimType);
            }
        }

        private static void CreateMaps()
        {
            Mapper.CreateMap<Lender, LenderServiceModel>()
                .ForMember(dest => dest.ClaimTypes, opts => opts.MapFrom(src =>
                    src.ClaimTypes.ToString().Split(new string[]{", "}, StringSplitOptions.None).ToList()));
        }
    }

    [Flags]
    public enum ClaimType : int
    {
        A = 1,
        B = 2,
        C = 4
    }

    public class Lender
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public ClaimType ClaimTypes { get; set; }
    }

    public class LenderServiceModel 
    {
        public int Id { get; set; }

        public string Name { get; set; }

        public List<string> ClaimTypes { get; set; }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-12
    • 1970-01-01
    • 1970-01-01
    • 2015-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多