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.
}
}
私の問題は、私は具体的なimplemenationを割り当てて使用可能なものの一般的なインターフェイスのFileProcessorクラスのフィールドを作成するにはどうすればよいのですか?私はインスタント化をIoCに移すことも考えています。
個々のトランザクションの追加処理を行い、dbに保存する必要があります。現在、FileTypeに基づいてProcessFile内の具体的な実装のローカル変数を使用しています。私は、ローカル変数をインスタンスフィールドで置き換えることができるかどうかを見たいと思っていました。 – Satish
@Satish:なぜですか?本当にそこにフィールドがあるのはどういう意味ですか? 'IFileParser'を作成したが、間違った 'FileType'でファイルを解析するように求められたらどうなるでしょうか?あなたがそうしたら、それを一般的にするだけです。 –
私はそれはありません:)私はローカル変数のアプローチに固執すると思います。ありがとう。 – Satish