为何使用RegisterAssemblyTypes()?关于Autofac注册逻辑的疑问
关于Autofac批量注册Repository的解惑
你对这段代码的理解有个关键偏差:当你把多个具体类型注册到IRepository抽象时,不是只能拿到最后一个注册的实例——这取决于你怎么解析它。下面说几种这么写的合理场景:
- 需要获取所有Repository实现的时候:如果你在代码里解析
IEnumerable<IRepository>,Autofac会返回所有符合条件的Repository实例。比如你要统一初始化所有仓库、或者遍历执行某个通用操作(比如数据预热),这种批量注册能省掉一个个手动注册的麻烦。 - 后续可以单独覆盖特定实现:假设你先批量注册了所有结尾是Repository的类型,之后可以单独注册某个特定的Repository(比如
builder.RegisterType<SpecialRepository>().As<IRepository>()),这时候单独注册的会覆盖批量的,当你直接解析IRepository时会拿到这个特殊实现,而集合解析依然能拿到所有包括这个特殊的。 - 简化注册流程:如果你的项目里所有Repository都遵循
XXXRepository命名规范且都实现IRepository,用这种批量注册可以避免重复写大量单个注册代码,让配置更简洁。
另外补充:如果你的本意就是每次解析IRepository只拿到一个实例,那这种批量注册确实有问题,但它本身是为多实现场景设计的写法,不是用来注册单个实现的。
内容的提问来源于stack exchange,提问作者J. Mini
相关产品推荐
相关产品推荐

