我正在编写一个文件处理服务来解析和处理不同类型的事务文件。我有一个通用文件解析器,具有不同类型的事务的实现,如下所示。
public interface IFileParser<T>
{
List<T> Parse(StreamReader fileStream);
}
public MonthlyParser : IFileParser<MonthlyTransaction>
{
public List<MonthlyTransaction> Parse(StreamReader fileStream)
{
......
}
}
public DailyParser : IFileParser<DailyTransaction>
{
public List<DailyTransaction> Parse(StreamReader fileStream)
{
.....
}
}
public enum FileTypes
{
DailyTransaction,
MonthlyTransaction
}
public class FileProcessor
{
private TransactionContext dataContext;
private IFileParser<T> fileParser;
public FileProcessor(TransactionContext dbContext)
{
dataContext = dbContext;
}
public void ProcessFile(string filePath, FileType fileType)
{
// here instantiate IFileParser based on FileType.
// parse and process file.
}
}
我的问题是如何在该通用接口的FileProcessor类中创建一个字段,可以为其分配和使用具体实现?我也在考虑将实例化转移到IoC。
答案 0 :(得分:3)
如果你想拥有FileProcessor
类型的字段,你也必须使IFileParser<T>
成为通用的。
但是,不清楚为什么你真的需要有一个这种类型的字段 - 为什么它不能成为ProcessFile
中的局部变量?即使你已经创建了它,你也不清楚你对列表的处理方式......你会对每个元素做些什么?