如何在AutoFac中注册单独程序集中的服务和类型?

时间:2013-08-16 00:03:33

标签: dependency-injection ioc-container autofac

我正在尝试使用AutoFac注册我的'服务'。这些服务基于约定(Aggregate Root +'Service')命名,所有实现的接口都具有相同的名称:'I'+ ServiceName。例如,OrderService实现了IOrderService

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

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

这是在AutoFac中实现此目的的最佳方法吗?如果我的一些服务来自抽象类会怎样?

1 个答案:

答案 0 :(得分:7)

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

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

我想提醒您注意某些表示SRP violationsRAP violations的类后缀,例如HelperManager和...... Service。您可能希望尝试不同的设计,其中此类服务类的每个查询和用例都放在其自己的类中并标记为with a generic interface。这样,您可以使用一行注册相同通用接口的所有实现:

builder.RegisterAssemblyTypes(
    AppDomain.CurrentDomain.GetAssemblies())
    .AsClosedTypesOf(typeof(ICommandHandler<>));
相关问题