将服务实例作为方法参数传递
Pass a service instance as a method parameter
我有 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);
}
}
这样可以吗?
这里技术上没有任何错误。它将编译并"work"。然而,像这样的循环依赖是糟糕设计的标志。这意味着您在这两个服务之间流血逻辑,所以您要么让服务做的比他们应该做的多,要么没有在这两个上下文之间明确划定界限。
我有 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);
}
}
这样可以吗?
这里技术上没有任何错误。它将编译并"work"。然而,像这样的循环依赖是糟糕设计的标志。这意味着您在这两个服务之间流血逻辑,所以您要么让服务做的比他们应该做的多,要么没有在这两个上下文之间明确划定界限。