Fluent验证规则构建器获取属性访问器

时间:2018-01-08 00:44:22

标签: c# .net-core asp.net-core-2.0 fluentvalidation

我正在编写一个通过更改跟踪器实体状态工作的验证器。我试图制作一种方法来验证实体是否未被更改。

我有一个看起来像这样的验证器:

ConversationStateValidator : ValidatorByState<Conversation>
{
    EntityEntry CurrentEntry { get; set; }

    protected override void InitializeModifiedRules()
    {
        this.RuleFor(x => x.EmployeeUserId).Must().NotChanged(CurrentEntry );
    }
}

我无法弄清楚如何从IRuleBuilder获取指向属性的表达式

static void NotChanged<T, TProperty>(IRuleBuilder<T, TProperty> ruleBuilder, EntityEntry entityEntry)
{
     //I want to do something like this to get the x => x.EmployeeUserId
     ruleBuilder.GetExpectedPropertyAccessor();
}

有谁知道我如何访问预期的属性访问器。

2 个答案:

答案 0 :(得分:0)

您正在以错误的方式使用FluentValidation。 Validator是某种类型的应用程序服务。一个验证器实例可以验证许多实体。

AbstractValidator具有验证规则的内部集合,您可以通过反射获取PropertyRule,但这是错误的方式。

答案 1 :(得分:0)

您可以通过半遮蔽的方式获得它。这依赖于实现细节,但它似乎可以正常工作,并且没有反射。

public static RuleBuilder<TEntity, TProp> AsRuleBuilder<TEntity, TProp>(this IRuleBuilder<TEntity, TProp> ruleBuilder)
{
    return ruleBuilder.As<RuleBuilder<TEntity, TProp>>();
}
相关问题