Kar*_*arl 5 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();
Run Code Online (Sandbox Code Playgroud)
这是在AutoFac中实现此目的的最佳方法吗?如果我的一些服务来自抽象类怎么办?
Autofac不关心这些接口是否在同一个程序集中.所以你的注册很好,但如果你想从几个程序集加载'services',你可以传入一个程序集集合:
builder.RegisterAssemblyTypes(AppDomain.CurrentDomain.GetAssemblies())
.Where(t => t.Name.EndsWith("Service"))
.AsImplementedInterfaces();
Run Code Online (Sandbox Code Playgroud)
我想提醒你有关某一类后缀指示SRP的侵犯,以及RAP违法行为,如Helper,Manager和... Service.您可能希望尝试不同的设计,其中此类服务类的每个查询和用例都放在其自己的类中,并使用通用接口进行标记.这样,您可以使用一行注册相同通用接口的所有实现:
builder.RegisterAssemblyTypes(
AppDomain.CurrentDomain.GetAssemblies())
.AsClosedTypesOf(typeof(ICommandHandler<>));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5246 次 |
| 最近记录: |