Я разрабатываю программное обеспечение на C#, в котором пользователь может фильтровать объекты данных, применяя последовательный список фильтров. Эти фильтры хранятся в списке классов FilterBase, которые можно сериализовать, а затем загружать и десериализовать. Затем класс Filterer последовательно применяет эти фильтры к набору данных
class FilterBase{
List<Data> Filter(List<Data> data);
}
class ValueFilter : FilterBase{
public int MaxValue{get;set;}
public int MinValue {get;set;}
List<Data> Filter(List<Data> data){
//Filter by data.Value
}
}
class Filterer{
List<Data> data(List<Filter> filters, List<Data> data){
//loop over all filters and apply them to data
}
}
Это работает нормально, но теперь у меня появилось новое требование - фильтр, который требует ввода данных пользователем во время действия фильтрации.
class UserInputFilter: FilterBase{
IUserInputProvider UserInputProvider{get;set;}
List<Data> Filter(List<Data> data){
var input = UserInputProvider.GetUserInput();
//Filter by data.SomeValue
}
}
Теперь этот класс больше не сериализуем, поскольку он требует внедрения зависимости IUserInputProvider.
Мое текущее решение состоит в том, чтобы использовать отражение, чтобы выбрать UserInputFilters из списка десериализованных фильтров, а затем внедрить эту зависимость, однако это кажется не элегантным решением. Есть ли шаблон для решения такой проблемы?