我有一个包含表单的页面的 cms。
我希望在 cms 中有一个包含不同类名的下拉列表,它们都实现了一个验证接口。
我的表单处理程序包含一个我想针对所选验证类进行验证的过程方法。
所以我有这个界面:
public interface IEligibilityValidation
{
bool IsValid();
}
例如这个类
public class ComplexEligibilityValidation : IEligibilityValidation
{
public bool IsValid()
{
return true; /* complex logic here */
}
}
public class SimpleEligibilityValidation : IEligibilityValidation
{
public bool IsValid()
{
return true; /* less complex logic here */
}
}
然后我有一个表单处理程序,它可以读取选定的类名以进行验证。
我不确定我的处理程序是否也应该实现 IEligibilityValidation 或者我是否可以以某种方式使用反射调用该类。
例如:
public class SampleFormHandler : IEligibilityValidation
{
public SimpleFormHandler(FormViewModel model, INode node)
{
this.model = model;
this.node = node;
eligiblityValidationClass = GetPropertyValue("eligibilityValidation");
}
public SampleProcessResult Process()
{
if (!string.IsNullOrEmpty(eligiblityValidationClass))
{
var thisType = Type.GetType(eligiblityValidationClass);
var thisInstance = Activator.CreateInstance(thisType);
var isValid = ((IEligibilityValidation)thisInstance).IsValid();
/* Works however, I need the IsValid to have access to a the FormHandler's properties and injected services */
}
}
public bool IsValid()
{
/* Will Always be ignored */
return true;
}
}
做这样的事情最优雅的方式是什么?
这个想法是不同的 FormHandler 将分配给它们不同的 Validation 类,并且在调用 IsValid 方法时将能够使用该表单的属性。
我正在寻找一些高级架构或更智能的东西,而不仅仅是需要不必要的代码。
谢谢