首页 > 解决方案 > c# 使用资源文件缩短数据注释

问题描述

我有所有这些模型,它们使用数据注释来验证并向我的 API/接口显示漂亮的消息

例如:

public class ConversionViewModel
{
    public int Id { get; set; }
    [Required(ErrorMessageResourceName = "RequiredErrorMessage", ErrorMessageResourceType = typeof(Resources)), StringLength(100, ErrorMessageResourceName = "StringLengthErrorMessage", ErrorMessageResourceType = typeof(Resources))] public string Name { get; set; }
    [Range(1, int.MaxValue, ErrorMessageResourceName = "RangeErrorMessage", ErrorMessageResourceType = typeof(Resources))] public int FeedId { get; set; }
    [Range(1, int.MaxValue, ErrorMessageResourceName = "RangeErrorMessage", ErrorMessageResourceType = typeof(Resources))] public int FieldId { get; set; }
    public Operator Operator { get; set; }
    [Required(ErrorMessageResourceName = "RequiredErrorMessage", ErrorMessageResourceType = typeof(Resources)), StringLength(100, ErrorMessageResourceName = "StringLengthErrorMessage", ErrorMessageResourceType = typeof(Resources))] public string Expression { get; set; }
}

现在那里发生了太多事情。如果我能把注释缩短一点,我会很高兴。我在整个项目中的所有注释看起来都和这里的一模一样。有没有办法缩短它们(并且仍然使用我的资源文件),所以它看起来像这样:

public class ConversionViewModel
{
    public int Id { get; set; }
    [Required, StringLength(100)] public string Name { get; set; }
    [Range(1, int.MaxValue)] public int FeedId { get; set; }
    [Range(1, int.MaxValue)] public int FieldId { get; set; }
    public Operator Operator { get; set; }
    [Required, StringLength(100)] public string Expression { get; set; }
}

也许我可以编写一个始终使用我的资源文件的自定义属性?

标签: c#data-annotations

解决方案


可能是OT但是...

可能格式化代码会达到类似的结果,我个人更喜欢它自己的行上的每个属性,我发现它更容易阅读。

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

    [Required(ErrorMessageResourceName = "RequiredErrorMessage", ErrorMessageResourceType = typeof(Resources))]
    [StringLength(100, ErrorMessageResourceName = "StringLengthErrorMessage", ErrorMessageResourceType = typeof(Resources))]
    public string Name { get; set; }

    [Range(1, int.MaxValue, ErrorMessageResourceName = "RangeErrorMessage", ErrorMessageResourceType = typeof(Resources))]
    public int FeedId { get; set; }

    [Range(1, int.MaxValue, ErrorMessageResourceName = "RangeErrorMessage", ErrorMessageResourceType = typeof(Resources))]
    public int FieldId { get; set; }

    public Operator Operator { get; set; }

    [Required(ErrorMessageResourceName = "RequiredErrorMessage", ErrorMessageResourceType = typeof(Resources))]
    [StringLength(100, ErrorMessageResourceName = "StringLengthErrorMessage", ErrorMessageResourceType = typeof(Resources))]
    public string Expression { get; set; }
}

推荐阅读