我有一个包含表单页面的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;
}
}
什么是做这样的事情最优雅的方式?
这个想法是不同的FormHandlers都会有不同的验证类分配给他们,并调用时IsValid的方法将能够使用该表单的属性。
我找了一些先进的架构或更聪明的东西不仅仅需要不必要的代码。
谢谢