6

我正在尝试向 Autofac 注册我的“服务”。这些服务是根据约定命名的(聚合根+“服务”),并且都实现了具有相同名称的接口:“我”+服务名称。例如,OrderService实现IOrderService.

但是,具体类型和接口都在单独的程序集中。到目前为止,我有以下代码:

builder.RegisterAssemblyTypes(typeof(OrderService).Assembly)
       .Where(t => t.Name.EndsWith("Service"))
       .AsImplementedInterfaces();

这是在 Autofac 中完成此任务的最佳方法吗?如果我的某些服务派生自抽象类怎么办?

4

1 回答 1

9

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

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

我想警告您某些指示SRP 违规RAP 违规的类后缀,例如Helper,ManagerService...。您可能想尝试一种不同的设计,其中此类服务类的每个查询和用例都放置在其自己的类中,并使用通用接口进行标记。这样,您可以用一行注册同一通用接口的所有实现:

builder.RegisterAssemblyTypes(
    AppDomain.CurrentDomain.GetAssemblies())
    .AsClosedTypesOf(typeof(ICommandHandler<>));
于 2013-08-16T06:52:54.420 回答