簡體   English   中英

具有通用枚舉的通用 FluentValidation 驗證器

[英]Generic FluentValidation Validator with a generic enum

我一直在試驗泛型,並嘗試使用泛型枚舉編寫泛型驗證器。

設置如下:

我有一個界面:

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

以下型號:

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

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

一個枚舉:

public enum Properties
{
    prop1,
    prop2,
    prop3
}

有了這個,我想創建一個通用的“屬性”驗證器:

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

但是當我想使用它時:

var validator = new ModelPropertiesValidator<模型,屬性>();

彈出以下錯誤:

類型“Project.Models.Model<Project.Models.ModelWithProperties>”不能用作泛型類型或方法“ModelPropertiesValidator<T, TEnum>”中的類型參數“T”。 沒有從“Project.Models.Model<Project.Models.ModelWithProperties>”到“Project.Contracts.IHasProperties<Project.Types.Properties>”的隱式引用轉換。

這樣的事情可能嗎?

您應該將代碼更改為:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM