Autofac: разрешение на основе условия / параметра для удаления операторов переключения для создания экземпляров - PullRequest
0 голосов
/ 23 октября 2018

Представьте себе большой оператор switch, который создает различные классы:

switch (typeIdentifier)
{
    case SomeEnum.Type1:
        instantiatedObject = new Type1Class(...);
        break;
    ...
}

Type1Class, Type2Class, ..., TypeNClass, все они наследуются от общего абстрактного класса.Я хотел бы заменить весь оператор switch чем-то вроде:

scope.Resolve<TheAbstractClass>(...);

Тем не менее, он должен быть преобразован в правильный класс на основе значения typeIdentifier.Я задаюсь вопросом, возможно ли это, и если да, то как?

Одним из решений было бы полное отказ от autofac и просто наличие словаря делегатов, который создает экземпляр нужного класса.Но я предпочитаю использовать автофак из-за простоты.Заранее спасибо!

1 Ответ

0 голосов
/ 23 октября 2018

В Autofac доступно несколько опций, известных как Keyed, Named.

Ниже приведен пример кода для Named -

Регистрация -

 containerBuilder.RegisterType<Type1Class>().Named<ITestItem>("Type1");

Разрешить -

var testItem = container.ResolveNamed<ITestItem>("Type1");

Более подробную информацию можно найти по ссылке https://autofaccn.readthedocs.io/en/latest/advanced/keyed-services.html.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...