RegisterMany не регистрирует все интерфейсы

Я использую DryIoc, и это мой первый опыт работы с инфраструктурой инъекций зависимостей. В основном мне нужно зарегистрировать все классы, реализующие IService как singleton. Из каждой реализации IService мне нужно зарегистрировать все остальные интерфейсы. Я хотел бы сделать это с помощью одной инструкции. Поэтому моя первая попытка:

container.RegisterMany<IService>(Reuse.Singleton);

Я получаю DryIoc.ContainerException Регистрация абстрактного типа реализации IService, когда он должен быть конкретным. Также вместо этого не используется FactoryMethod

После некоторого поиска я нашел:

 container.RegisterMany(new[] { typeof(IService).Assembly }, type => type.IsAssignableTo(typeof(IService)),
            Reuse.Singleton, FactoryMethod.ConstructorWithResolvableArguments);

Но

resolver.ResolveMany<IOtherInterface>();

возвращает пустое перечисление.

Если я зарегистрирую каждую отдельную реализацию, например

container.RegisterMany<Service1>(Reuse.Singleton);
container.RegisterMany<Service2>(Reuse.Singleton);
...

все работает, но я полагаю, что есть способ сделать это, не записывая ни одного регистра для каждой реализации службы.

+2
источник поделиться
1 ответ

Он не работает, потому что вы фильтруете типы услуг (интерфейсы) вместо типов реализации.

Попробуй это:

container.RegisterMany(
    typeof(IService).Assembly.GetLoadedTypes()
        .Where(t => t.IsAssignableTo(typeof(IService))),
    t => t.IsInterface, …);
+1
источник

Посмотрите другие вопросы по меткам или Задайте вопрос