简体   繁体   English

具有通用枚举的通用 FluentValidation 验证器

[英]Generic FluentValidation Validator with a generic enum

I have been experimenting with generics and tried writing a generic validator using a generic enum.我一直在试验泛型,并尝试使用泛型枚举编写泛型验证器。

The setup is as following:设置如下:

I have an interface:我有一个界面:

public interface IHasProperties<TEnum> where TEnum : struct, Enum
{
    public IEnumerable<TEnum>? Properties { get; set; }
}

The following models:以下型号:

public class Model<T>
{
    public IEnumerable<T> ModelWithProperties { get; set; }
}

public class ModelWithProperties : IHasProperties<Properties>
{
    public IEnumerable<Properties> Properties { get; set; }
}

An enum:一个枚举:

public enum Properties
{
    prop1,
    prop2,
    prop3
}

With this I want to create a generic 'properties' validator:有了这个,我想创建一个通用的“属性”验证器:

public class ModelPropertiesValidator<T, TEnum> : AbstractValidator<T> where T : IHasProperties<TEnum> where TEnum : struct, Enum
{
    public ModelPropertiesValidator()
    {
        RuleFor(x => x.Properties).NotEmpty();
    }
}

But when I want to use it:但是当我想使用它时:

var validator = new ModelPropertiesValidator<Model, Properties>(); var validator = new ModelPropertiesValidator<模型,属性>();

The following error pops up:弹出以下错误:

The type 'Project.Models.Model<Project.Models.ModelWithProperties>' cannot be used as type parameter 'T' in the generic type or method 'ModelPropertiesValidator<T, TEnum>'.类型“Project.Models.Model<Project.Models.ModelWithProperties>”不能用作泛型类型或方法“ModelPropertiesValidator<T, TEnum>”中的类型参数“T”。 There is no implicit reference conversion from 'Project.Models.Model<Project.Models.ModelWithProperties>' to 'Project.Contracts.IHasProperties<Project.Types.Properties>'.没有从“Project.Models.Model<Project.Models.ModelWithProperties>”到“Project.Contracts.IHasProperties<Project.Types.Properties>”的隐式引用转换。

Is something like this possible?这样的事情可能吗?

您应该将代码更改为:

var validator = new ModelPropertiesValidator<ModelWithProperties, Properties>();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM