Задача состоит в том, чтобы ваши правила знали, какое свойство какого типа проверять. Вы можете обеспечить это либо путем реализации интерфейса, который предоставляет именно это, как предложено SLaks, либо путем динамического отказа от него, либо предоставив конкретному классу правил немного больше информации о том, как получить доступ к данному свойству, например ::
.
class NameRule<T> : IRule<T>
{
private Func<T, string> _nameAccessor;
public NameRule(Func<T, string> nameAccessor)
{
_nameAccessor = nameAccessor;
}
public bool IsValid(T instance)
{
return _nameAccessor(instance).Length > 10;
}
}
этот курс можно использовать следующим образом:
NameRule<Employee> employeeNameRule = new NameRule<Employee>(x => x.name);
employeeManager.addRule(employeeNameRule);