RegisterMany不会注册所有接口

时间:2018-04-08 08:38:41

标签: c# dependency-injection dryioc

我正在使用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);
...

一切正常,但我想有一种方法可以做到这一点,而无需为每个服务实现编写单个寄存器。

1 个答案:

答案 0 :(得分:1)

它不起作用,因为您正在过滤服务类型(接口)而不是实现类型。

试试这个:

container.RegisterMany(
    typeof(IService).Assembly.GetLoadedTypes()
        .Where(t => t.IsAssignableTo(typeof(IService))),
    t => t.IsInterface, …);