我使用.NET标准(2.1)类库和.NET Core3.0作为web API,因此使用Microsoft.Extensions.DependencyInjection
库,尽管我怀疑这并不重要。
一般的做法是,我的组合根( API项目)应该协调应用程序接口所需的所有实现。
当我想要为其设置注入的Web API项目具有未知接口时,我该如何处理此问题?
例如,CQRS类型依赖堆栈:
MyProject.Web.API, depends on:
MyProject.MyService, which depends on:
MyProject.MyService.Command
MyProject.MyService.Command.Data
MyProject.MyService.Query
MyProject.MyService.Query.Data
MyProject.Web.API不知道数据项目的存在,但是每个数据项目都有一个我想要处理的ICommandDbContext
或IQueryDbContext
。
如果不将底层接口一直公开到Web API项目,我就无法在组合根中设置这些接口,因为其他任何原因都是完全不必要的。我如何处理这些低级项目中的依赖注入?
发布于 2019-10-20 20:50:18
这将需要那些较低的级别公开一个扩展点,以允许它与容器通信,从而用所需的依赖项填充它。
例如
MyProject.MyService
public static class MyServiceProjectExtension {
public IServiceCollection AddMyServiceDependencies(this IServiceCollection services) {
services.AddDbContext<ICommandDbContext, CommandDbContext>(...);
//...
return services;
}
}
并且组合根调用服务项目中的扩展点
MyProject.Web.API
public void ConfigureServices(IServiceCollection services) {
services.AddMyServiceDependencies();
}
然而,这意味着MyProject.MyService
将直接依赖于Microsoft.Extensions.DependencyInjection.Abstractuions
,以便了解DI框架。
https://stackoverflow.com/questions/58476770
复制