Las*_*tio 9 c# dependency-injection circular-dependency .net-core
我有一个MyProject项目,我有实现的IMyService接口和MyService类IMyService.在Startup.cs类中,我依赖注入它们:
// MyProject project | Startup.cs
public void ConfigureServices(IServiceCollection services)
{
    services.AddScoped<IMyService, MyService>();
}
因为MyService有许多依赖项(对第三方等进行许多REST调用)我想为开发环境创建它的存根版本.我创建了引用MyProject的新MyStubsProject.我实现了对MyStubsProject的存根版本:IMyService
// MyStubsProject project
public class MyStubService : IMyService
{
    ...
}
所以现在我想向Startup.cs类添加依赖注入:
// MyProject project | Startup.cs
public void ConfigureServices(IServiceCollection services)
{
    if (isDevelopmentEnvironment)
        services.AddScoped<IMyService, MyStubService>();
    else
        services.AddScoped<IMyService, MyService>();
}
但是,如果我添加它,MyProject和MyStubsProject之间将存在循环依赖.
我应该如何在Startup.cs中实现对类MyStubService或MyStubsProject项目的引用?
最好的答案可能是将您的服务提取到一个单独的项目中 - 至少是服务合同(IMyService).这应该让您现有的项目都引用服务合同而不会产生任何冲突.如果您想添加其他接口,或添加相同接口的其他实现,现在也很容易.
另一个好处可能是更好的整体架构:将合同保存在一个单独的项目中,其中不包含任何实际逻辑(仅接口)通常会产生更好的组织和更清晰的代码.
| 归档时间: | 
 | 
| 查看次数: | 131 次 | 
| 最近记录: |