public interface IStreamFilter
{
string Delimiter {get; private set;}
List<string> FilterCriteria {get; private set;}
}
public class StreamFilter : IStreamFilter
{
public string Delimiter {get;}
public List<string> FilterCriteria {get;}
public void StreamFilter (string delimiter, List<string> filterCriteria)
{
this.Delimiter = delimiter;
this.FilterCriteria = filterCriteria;
}
}
您可以在 Reader 和 Writer 类的构造函数中传递 IStreamFilter 的实例。
public class MyReader
{
private IStreamFilter _streamFilter;
public MyReader(IStreamFilter streamFilter)
{
this._streamFilter = streamFilter;
}
public string ReadString()
{
var readString = reader.GetString(x => x.Contains(this._streamFilter.Delimiter);
// apply the filter for reading string
}
}
在代码中要实例化 MyReader 类的任何位置,您都可以在构造函数中创建 IStreamFilter 的新实例,并根据用户偏好(假设来自用户配置文件)设置分隔符和其他过滤条件。然后将该 StreamFilter 实例传递给 MyReader 实例。这样,您可以在不依赖 Singleton 的情况下即时自定义过滤器设置。