我有两个服务实现了相同的接口.在回答How to register multiple implementations of the same interface in Asp.Net Core?之后,我简化了代码,
Interface:
public interface ICheckService
{
Method1();
Task Method2();
}
CheckerService:
public class CheckerService : ICheckService
{
private readonly DapperContext _context;
private readonly ILogger<CheckerService> _logger;
public CheckerService(DapperContext context,ILogger<CheckerService> logger)
{
_logger = logger;
_context = context;
}
}
DesignerService:
public class DesignerService : ICheckService
{
private readonly DapperContext _context;
private readonly ILogger<DesignerService> _logger;
public DesignerService(DapperContext context,ILogger<DesignerService> logger)
{
_logger = logger;
_context = context;
}
}
在我的Startup.cs文件中:
public delegate ICheckService ServiceResolver(string key);
...
services.AddScoped<ICheckService, DesignerService>();
services.AddScoped<ICheckService, CheckerService>();
services.AddScope<ServiceResolver>(serviceProvider => key =>
{
switch (key)
{
case "DesignerService":
return serviceProvider.GetService<DesignerService>();
case "CheckerService":
return serviceProvider.GetService<CheckerService>();
default:
throw new KeyNotFoundException();
}
});
在Controller:强中
private readonly ICheckService _checklistService;
public DesignerController(ServiceResolver serviceAccessor)
{
_checklistService = serviceAccessor("DesignerService");
}
但在启动代码后,我发现返回的服务是null.但是如果我删除switch 代码并将控制器构造函数更改为
public DesignerController(ICheckService checkService)
{
_checklistService = checkService;
}
一切都很好.
有人能告诉我我哪里做错了吗?谢谢