Использование IOptions для экземпляра, созданного с помощью Activator в c # - PullRequest
0 голосов
/ 15 октября 2019

Я ищу любой шаблон / фабрику для динамического создания экземпляра класса и обеспечения опций для 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);

Как этого добиться? Есть ли какой-то шаблон?

...