下面是注入另一个类的依赖项的实现。
public class CsvDataProvider : ICsvDataProvider
{
readonly ICsvReaderFactory _factory;
public CsvDataProvider(ICsvReaderFactory factory)
{
_factory = factory;
}
public IEnumerable<TRecord> GetData<TRecord>(string filepath) where TRecord : class
{
var reader = _factory.CreateCsvReader(filepath);
return reader.GetRecords<TRecord>();
}
}
将读取 CSV 文件中reader
的factory
所有行并将每一行转换为TRecord
. 我不拥有reader
代码,也无法更改GetRecords<TRecord>()
方法。
这是我卡住的地方:
public class CsvDataMigrationController
{
readonly ICsvDataProvider _provider;
readonly ICsvDataMigration _migration;
public CsvDataMigrationController(ICsvDataProvider provider, ICsvDataMigration migration)
{
_provider = provider;
_migration = migration;
}
public void ProcessFile(string path)
{
var records = _provider.GetData<I_DONT_WANT_TO_EXPLICITLY_SAY>(path); //<-- Help!
_migration.Migrate(records);
}
}
目的是将数据提供者和迁移过程类注入CsvDataMigrationController
. 控制器将调用数据提供者来获取数据并将数据传递给迁移类。
- 我不想
CsvDataMigrationController
知道所涉及的数据类型。 - 我不想让
CsvDataProvider
他们知道迁移。 - 我不想
CsvDataMigration
知道数据来自哪里。
关于如何实现这一目标的任何建议?
注意:我没有包含CsvDataMigration
该类,因为我认为它在解释中没有用,但如果需要,会包含它。