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

问题描述 投票:0回答:1

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

这样可以吗?

c# asp.net-core dependency-injection asp.net-core-2.2
1个回答
2
投票

没有什么 技术上 错在这里。它将会编译和 "工作"。然而,像这样的循环依赖是一个糟糕设计的标志。这意味着你在这两个服务之间流淌着逻辑,所以你要么是让服务做的比它们应该做的多,要么就是没有清楚地划分两个上下文之间的界限。

© www.soinside.com 2019 - 2024. All rights reserved.