2011-06-21 27 views
2

我在寫一個文件處理服務來解析和處理不同種類的事務文件。我有一個通用文件解析器,其中包含不同類型事務的實現,如下所示。在類中創建通用字段

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。

回答

3

如果你想有一個IFileParser<T>類型的字段,你也必須使FileProcessor通用。

但是,目前還不清楚爲什麼你真的需要這個類型的字段 - 爲什麼它不能成爲ProcessFile中的局部變量?也不完全清楚,即使創建它,您也可以使用該列表做什麼?您將如何處理每個元素?

+0

我需要做一些額外的個人交易處理並將其保存在數據庫中。目前我使用基於fileType的ProcessFile內的具體實現的局部變量。我想看看是否可以用實例字段替換局部變量。 – Satish

+0

@Satish:爲什麼?它真的有什麼意義在那裏有一個領域?如果你創建了一個'IFileParser ',但卻被要求用錯誤的'FileType'解析一個文件呢?那麼,如果你這樣做,你只需要使其通用。 –

+0

我想它不:)我會堅持局部變量的方法。謝謝。 – Satish