【发布时间】:2009-12-29 15:53:27
【问题描述】:
我正在创建一个 CSV 阅读器(是的,我知道 Fast CSV Reader 和 FileHelpers)。 CsvReader 类使用 CsvParser 类来解析 CSV 文件。我想让 CsvReader 类可单元测试,所以我希望能够在外部设置使用的 CsvParser 类(另外,您可以创建自己的实现)。我也不想创建解析器并在正常使用时传递它。
这就是我想使用它的方式。
var reader = new CsvReader( "path/to/file.csv" );
执行此操作时,我可以在 CsvReader 的构造函数中创建 CsvParser,并具有更改解析器的属性。
public ICsvParser Parser { get; set; }
public CsvReader( filePath )
{
Parser = new CsvParser( filepath );
}
但是当单元测试时,总是创建默认解析器,我只想测试 CsvReader。
解析器可以传递给构造函数,但我不想在正常使用时单独创建解析器。这似乎是一个工厂的好地方。
这似乎是使用 IOC 时的常见问题。有什么好的解决方案?
【问题讨论】:
标签: c# dependency-injection inversion-of-control