传递服务实例作为方法参数

时间:2020-04-30 11:35:28

标签: c# asp.net-core dependency-injection asp.net-core-2.2

我有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);
    }
}

可以吗?

1 个答案:

答案 0 :(得分:2)

这里没有什么技术上的错误。它将编译并“工作”。但是,具有这样的循环依赖性是不良设计的标志。这意味着您正在浪费这两个服务之间的逻辑,因此您要么使服务执行的工作量超出其应有的水平,要么就没有清楚地界定两个上下文之间的界限。

相关问题