c# - 用于许多接口实现的 Autofac 注册
问题描述
我有几个需要在 Autofac 中注册的接口实现,但是我无法找到一种方法将它们全部一起完成,而不是像我目前拥有的那样单独完成:
builder.RegisterType<UserDefinedRepository<CType>>().As<IUserDefinedRepository<CType>>();
builder.RegisterType<UserDefinedRepository<LType>>().As<IUserDefinedRepository<LType>>();
两者都CType
具有LType
相同的基类型,并且接口和类实现的Type参数有相同类型的限制。
我已经阅读了很多有关 Autofac 实现的示例,但是对于我正在尝试做的事情来说,大多数示例似乎都太复杂了,而且文档也不是很有帮助(无论如何,根据我对它的理解!)。
我已经注册了多年来一直运行良好的所有其他存储库,但它们都有接口的具体实现:
var baseRepoType = typeof(InfraAbsRepos.IRepository);
builder.RegisterAssemblyTypes(Assembly.Load("Infrastructure.Repositories"))
.Where(t => baseRepoType.IsAssignableFrom(t))
.AsImplementedInterfaces()
.InstancePerRequest();
解决方案
AsClosedTypesOf
按照文档中的说明尝试。
builder.RegisterAssemblyTypes(Assembly.Load("Infrastructure.Repositories"))
.AsClosedTypesOf(typeof(IUserDefinedRepository<>))
.InstancePerRequest();
根据您要执行的操作,您可能需要添加一个Where
子句来过滤程序集类型列表;AsImplementedInterfaces
和/或如果您需要注册更多接口或类型,您可能想要添加一个。
如果没有足够的灵活性,RegisterAssemblyTypes
您始终可以使用反射自己迭代加载的类型集,并可能将其与Autofac 中的一些开放通用注册支持结合起来。
推荐阅读
- flutter - Flutter Container 在行的顶部
- html - 我想让我的文本在 CSS 中响应,但我遇到了问题
- gcc - 无法打开源文件“begin_code.h”(“SDL2/SDL.h”的依赖项)
- node.js - 使用节点 express 的 express 验证器生成的错误
- asp.net-core - User.IsInRole 在每个用户切换到一个角色后返回 false
- javascript - Google Apps 脚本中的 Classroom API IndividualStudentsOptions
- java - 如何使用 Paths.of 解决此错误?
- bash - 在 bash 脚本中交叉使用 yml 变量
- node.js - react 应该在带有 node.js 的车把上使用吗?
- swift - 如何将导航按钮添加到 SwiftUI 应用程序?