我有2个服务
MainService
PDFGeneratorService
它们是作用域
services.AddScoped<IMainService
我想在一个参数中将MainService
实例传递给PDFGenerator
方法作为侦听器:
示例实现:
public interface IFileGeneratorListener {
Task <int> Notify(int fileId);
}
public class MainService: IMainService, IFileGeneratorListener {
private readonly IPDFGeneratorService _pDFGeneratorService;
public MainService(IPDFGeneratorService service) {
_pDFGeneratorService = service;
}
public Task MainTask() {
_pDFGeneratorService.Generate(1, this);
}
public Task<int> FileGeneratedNotification(int fileId) {
Debug.Writeline($ "file {fileId} was generated");
}
}
public class PDFGeneratorService: IPDFGeneratorService {
public void Generate(int fileId, IFileGeneratorListener listener) {
// generate the file....
listener.Notify(fileId);
}
}
可以吗?
答案 0 :(得分:2)
这里没有什么技术上的错误。它将编译并“工作”。但是,具有这样的循环依赖性是不良设计的标志。这意味着您正在浪费这两个服务之间的逻辑,因此您要么使服务执行的工作量超出其应有的水平,要么就没有清楚地界定两个上下文之间的界限。