C# 在反序列化对象后添加依赖项
我正在用C语言开发一个软件,在这个软件中,用户可以通过应用一系列过滤器来过滤数据对象。这些过滤器存储在一个FilterBase类列表中,这些类可以序列化、随后加载和反序列化。Filterer类随后将这些过滤器依次应用于数据集C# 在反序列化对象后添加依赖项,c#,serialization,dependency-injection,deserialization,C#,Serialization,Dependency Injection,Deserialization,我正在用C语言开发一个软件,在这个软件中,用户可以通过应用一系列过滤器来过滤数据对象。这些过滤器存储在一个FilterBase类列表中,这些类可以序列化、随后加载和反序列化。Filterer类随后将这些过滤器依次应用于数据集 class FilterBase{ List<Data> Filter(List<Data> data); } class ValueFilter : FilterBase{ public int MaxValue{get;set;}
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
}
}
类过滤器基{
列表过滤器(列表数据);
}
类值过滤器:过滤器基{
public int MaxValue{get;set;}
公共int最小值{get;set;}
列表过滤器(列表数据){
//按数据值筛选
}
}
类过滤器{
列表数据(列表过滤器、列表数据){
//循环所有筛选器并将其应用于数据
}
}
这很好,但是现在我有了一个新的要求,一个过滤器,在过滤操作期间需要用户输入
class UserInputFilter: FilterBase{
IUserInputProvider UserInputProvider{get;set;}
List<Data> Filter(List<Data> data){
var input = UserInputProvider.GetUserInput();
//Filter by data.SomeValue
}
}
class UserInputFilter:FilterBase{
IUserInputProvider UserInputProvider{get;set;}
列表过滤器(列表数据){
var input=UserInputProvider.GetUserInput();
//按data.SomeValue筛选
}
}
现在这个类不再是可序列化的,因为它需要注入IUserInputProvider依赖项
我当前的解决方案是使用反射从反序列化过滤器列表中选择UserInputFilters,然后注入该依赖项,然而这似乎是一个不雅观的解决方案。有一种模式可以解决这样的问题吗?我建议将您的提供者作为参数传递给
过滤器
方法:
class UserInputFilter: FilterBase
{
List<Data> Filter(List<Data> data, IUserInputProvider provider)
{
var input = provider.GetUserInput();
//Filter by data.SomeValue
}
}
class UserInputFilter:FilterBase
{
列表过滤器(列表数据,IUserInputProvider)
{
var input=provider.GetUserInput();
//按data.SomeValue筛选
}
}
我建议将提供者作为参数传递给过滤器
方法:
class UserInputFilter: FilterBase
{
List<Data> Filter(List<Data> data, IUserInputProvider provider)
{
var input = provider.GetUserInput();
//Filter by data.SomeValue
}
}
class UserInputFilter:FilterBase
{
列表过滤器(列表数据,IUserInputProvider)
{
var input=provider.GetUserInput();
//按data.SomeValue筛选
}
}
那么也将依赖项添加到FilterBase?如果您需要在FilterBase
中使用此方法,请将其放置在那里。因此,也将依赖项添加到FilterBase?如果您需要在FilterBase
中使用此方法,请将其放置在那里。