我有一些类,如 UserQuery、CustomerQuery,分别实现了 IUserQuery、ICustomerQuery 等接口(interface)。在我的绑定(bind)配置中,我需要将每个接口(interface)与相应的查询绑定(bind):
builder.RegisterType<UserQuery>().As<IUserQuery>().InstancePerRequest();
builder.RegisterType<CustomerQuery>().As<ICustomerQuery>().InstancePerRequest();
这工作得很好,但我想知道是否有一种方法可以进行基于约定的绑定(bind)来代替绑定(bind)每个类 XXX[Query] -> [I]XXX[Query]。
我正在使用 AutoFac 作为我的 DI 容器。
最佳答案
我不是 AutoFac 有经验的用户。然而,经过一些研究,成功地测试了下面的代码:
var assembly = Assembly.GetExecutingAssembly();
builder
.RegisterAssemblyTypes(assembly)
.AssignableTo<IQuery>()
.AsImplementedInterfaces()
.InstancePerRequest();
上面的 IQuery 接口(interface)只是一个标记接口(interface),应该从您拥有的每个查询接口(interface)继承。使用您的示例:
接口(interface)
IUserQuery: IQuery
ICustomerQuery: IQuery
类
UserQuery: IUserQuery
CustomerQuery: CustomerQuery
关于c# - 使用 AutoFac 自动绑定(bind)接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14603928/