C# 对使用c中的Activator创建的实例使用IOOptions#

C# 对使用c中的Activator创建的实例使用IOOptions#,c#,generics,activator,C#,Generics,Activator,我正在寻找任何模式/工厂来动态创建类的实例,并为init提供选项 例如,我有IParser接口和一些类 公共接口IParser { 无效设置(iParSections选项); } 公共类CsvParser:IParser { 公共作废设置(iParSections选项) { } } 公共类XlsParser:IParser { 公共作废设置(iParSections选项) { } } 对于iParSections,也一样 公共接口iParSection { } 公共类CsvParserOpti

我正在寻找任何模式/工厂来动态创建类的实例,并为init提供选项

例如,我有
IParser
接口和一些类

公共接口IParser
{
无效设置(iParSections选项);
}
公共类CsvParser:IParser
{
公共作废设置(iParSections选项)
{
}
}
公共类XlsParser:IParser
{
公共作废设置(iParSections选项)
{
}
}
对于
iParSections
,也一样

公共接口iParSection
{
}
公共类CsvParserOptions:IParserOptions
{
公共字符串属性SpecificToCSV{get;set;}
}
公共类选项:iParSection
{
公共字符串属性SpecificToxls{get;set;}
}
有些地方只是使用Activator创建基本实例。但这并不重要

var parserType=GetType(“xxx”);
var parser=(IParser)Activator.CreateInstance(parserType);
现在我有了解析器,我需要调用
Setup
并传递
IParserOptions
定义。 但是我需要根据创建的解析器类型初始化并使用
CsvParserOptions
XlsParserOptions

//如果是csv
var csvOptions=new CsvParserOptions{propertysspecifictoccsv='abc'};
parser.Setup(csvOptions);
//如果xls
var xlsOptions=new XlsParserOptions{propertysspecifictoxls='abc'};
解析器设置(xlsOptions);

如何做到这一点?有什么模式吗?

嗯,是的。你自己也提到过,工厂模式:但我认为单靠一家工厂是不可能做到这一点的,对吗?我可以使用factory而不是activator来获取IParser实例。但是如何基于创建的IParser类型和初始化“数据”创建iParserOperations呢?工厂知道!这就是全部的想法。因为它知道类的类型,所以它知道参数的类型。我对您从何处获取初始化数据了解不够。也许可以为这个问题添加更多细节?另外,如何将选项类传递给构造函数,而不是使用
Setup
方法创建一个临时依赖项?我没有现有的代码。我只是在寻找一个解决方案,如何实现使用不同选项动态创建多个解析器。我不想使用任何
if-then-else
机制,仍然能够获得预期的解析器初始化实例。假设有一些公共服务提供配置数据,但它仍然只是源代码。每个选项的初始化方式都不同。然后工厂将查询服务并使用配置数据实例化正确类型的类。我个人过去所做的是从配置文件中读取信息。