我正在使用DryIoc,这是我第一次使用依赖项注入框架。基本上,我需要将实现IService的所有类注册为单例。在每个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);
...
所有的工作,但我想有一种方法,而无需为每个服务实现编写单个寄存器。
最佳答案
它不起作用,因为您正在过滤服务类型(接口)而不是实现类型。
尝试这个:
container.RegisterMany(
typeof(IService).Assembly.GetLoadedTypes()
.Where(t => t.IsAssignableTo(typeof(IService))),
t => t.IsInterface, …);