C# RegisterMany并不注册所有接口

C# RegisterMany并不注册所有接口,c#,dependency-injection,dryioc,C#,Dependency Injection,Dryioc,我正在使用DryIoc,这是我第一次体验依赖注入框架。基本上,我需要将实现IService的所有类注册为singleton。在每个iSeries设备实现中,我还需要注册所有其他接口。我想用一个指令来做这件事。 所以我的第一次尝试是: container.RegisterMany<IService>(Reuse.Singleton); 但是 resolver.ResolveMany(); 返回空枚举 如果我注册每一个实现,比如 container.RegisterMany<S

我正在使用DryIoc,这是我第一次体验依赖注入框架。基本上,我需要将实现IService的所有类注册为singleton。在每个iSeries设备实现中,我还需要注册所有其他接口。我想用一个指令来做这件事。 所以我的第一次尝试是:

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

resolver.ResolveMany();
返回空枚举

如果我注册每一个实现,比如

container.RegisterMany<Service1>(Reuse.Singleton);
container.RegisterMany<Service2>(Reuse.Singleton);
...
container.RegisterMany(重用.Singleton);
容器.RegisterMany(重用.Singleton);
...

所有这些都可以工作,但我认为有一种方法可以做到这一点,而不必为每个服务实现编写一个寄存器。

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

试试这个:

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

我找不到用于添加重用的构造函数。未引发DryIoc.ContainerException的Singleton注册抽象实现…>用于添加
重用的构造函数。Singleton
?Sbstract类无法注册为实现,因为它不是您可以在c中创建的。但它可以注册为服务类型以实现非抽象类。我没有抽象类。。。无论如何,我现在使用的是container.RegisterMany(重用.Singleton);容器.RegisterMany(重用.Singleton);和container.resolvemanny();返回两个单例,尽管I read X,Y,A共享同一个单例。同一个
RegisterMany
保证相同的单例。否则,如果您有多个寄存器,请使用文档中的注册表映射。
container.RegisterMany<Service1>(Reuse.Singleton);
container.RegisterMany<Service2>(Reuse.Singleton);
...
container.RegisterMany(
    typeof(IService).Assembly.GetLoadedTypes()
        .Where(t => t.IsAssignableTo(typeof(IService))),
    t => t.IsInterface, …);