Я ищу любой шаблон / фабрику для динамического создания экземпляра класса и обеспечения опций для init.
Так, например, у меня есть IParser
интерфейс и некоторые классы.
public interface IParser
{
void Setup(IParserOptions options);
}
public class CsvParser: IParser
{
public void Setup(IParserOptions options)
{
}
}
public class XlsParser: IParser
{
public void Setup(IParserOptions options)
{
}
}
То же самое для IParserOptions
.
public interface IParserOptions
{
}
public class CsvParserOptions: IParserOptions
{
public string PropertySpecificToCsv { get; set; }
}
public class XlsParserOptions: IParserOptions
{
public string PropertySpecificToXls { get; set; }
}
Где-то есть просто создание базового экземпляра с использованием Activator. Но это не имеет значения.
var parserType = GetType("xxx");
var parser = (IParser)Activator.CreateInstance(parserType);
Теперь у меня есть парсер, и мне нужно вызвать Setup
и передать определение IParserOptions
. Но мне нужно инициализировать и использовать CsvParserOptions
или XlsParserOptions
в зависимости от созданного типа анализатора.
// if csv
var csvOptions = new CsvParserOptions { PropertySpecificToCsv = 'abc' };
parser.Setup(csvOptions);
// if xls
var xlsOptions = new XlsParserOptions { PropertySpecificToXls = 'abc' };
parser.Setup(xlsOptions);
Как этого добиться? Есть ли какой-то шаблон?