在类中创建通用字段

时间:2011-06-21 17:44:25

标签: c# generics .net-4.0

我正在编写一个文件处理服务来解析和处理不同类型的事务文件。我有一个通用文件解析器,具有不同类型的事务的实现,如下所示。

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。

1 个答案:

答案 0 :(得分:3)

如果你想拥有FileProcessor类型的字段,你也必须使IFileParser<T>成为通用的。

但是,不清楚为什么你真的需要有一个这种类型的字段 - 为什么它不能成为ProcessFile中的局部变量?即使你已经创建了它,你也不清楚你对列表的处理方式......你会对每个元素做些什么?