gpt4 book ai didi

dependency-injection - 如何在 Autofac 中注册位于不同程序集中的服务和类型?

转载 作者:行者123 更新时间:2023-12-04 08:22:25 24 4
gpt4 key购买 nike

我正在尝试向 Autofac 注册我的“服务”。这些服务是根据约定命名的(聚合根+“服务”),并且都实现了具有相同名称的接口(interface):“我”+服务名称。例如,OrderService实现 IOrderService .
但是,具体类型和接口(interface)都在单独的程序集中。到目前为止,我有以下代码:

builder.RegisterAssemblyTypes(typeof(OrderService).Assembly)
.Where(t => t.Name.EndsWith("Service"))
.AsImplementedInterfaces();
这是在 Autofac 中完成此任务的最佳方法吗?如果我的某些服务派生自抽象类怎么办?

最佳答案

Autofac 不关心这些接口(interface)是否在同一个程序集中。所以你的注册很好,但如果你想从几个程序集中加载“服务”,你可以传入一组程序集:

builder.RegisterAssemblyTypes(AppDomain.CurrentDomain.GetAssemblies())
.Where(t => t.Name.EndsWith("Service"))
.AsImplementedInterfaces();

我想提醒您注意某些指示 SRP violations 的类后缀。 , 和 RAP violationsHelper , Manager , 和... Service .您可能想尝试不同的设计,其中此类服务类的每个查询和用例都放置在其自己的类中并标记为 with a generic interface .这样你就可以用一行注册同一个通用接口(interface)的所有实现:

builder.RegisterAssemblyTypes(
AppDomain.CurrentDomain.GetAssemblies())
.AsClosedTypesOf(typeof(ICommandHandler<>));

关于dependency-injection - 如何在 Autofac 中注册位于不同程序集中的服务和类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18263852/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com