public static IValitRule <TObject, TProperty> Satisfies <TObject, TProperty>(this IValitRule <TObject, TProperty> rule, Predicate <TProperty> predicate) where TObject : class { rule.ThrowIfNull(ValitExceptionMessages.NullRule); predicate.ThrowIfNull(ValitExceptionMessages.NullPredicate); IValitRuleAccessor <TObject, TProperty> accessor; if (rule.IsFirstInEnsure()) { accessor = rule.GetAccessor(); accessor.SetPredicate(predicate); return(rule); } var newRule = new ValitRule <TObject, TProperty>(rule); accessor = newRule.GetAccessor(); accessor.SetPredicate(predicate); return(newRule); }