У меня есть 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 сможет использовать свойства этой формы.
Я ищу некоторую расширенную архитектуру или что-то более умное, чем просто требующий ненужного кода.
Благодаря
Почему вы хотите конвертировать 'SampleFormHandler' в' desiredType' назвать 'IsValid', вместо того, чтобы просто позвонить' this.IsValid', я что-то отсутствует? –
this.IsValid вызовет реализацию текущего класса. Я хочу использовать реализацию IsValid GUID класса, которую я предоставляю. Поэтому иногда это будет SimpleEligibilityValidation, иначе это будет ComplexEligibilityValidation или какой-то другой класс, который реализует IEligibilityValidation. Выбираете, какая проверка должна использоваться в свойствах формы. – Nick
Насколько я понимаю, вы хотите создать динамический объект-валидатор, например, Activato.CreateInstance', но 'IsValid'method как получить данные для проверки? –