C# 在反序列化对象后添加依赖项

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;}

我正在用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
   }
}
类过滤器基{
列表过滤器(列表数据);
}
类值过滤器:过滤器基{
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
中使用此方法,请将其放置在那里。