Передать экземпляр службы в качестве параметра метода - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть 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 Ответ

2 голосов
/ 30 апреля 2020

Там нет ничего технически здесь не так. Это скомпилирует и "сработает". Однако наличие круговой зависимости, подобной этой, является признаком плохого дизайна. Это означает, что вы пропускаете логи c между этими двумя службами, поэтому вы либо заставляете службы делать больше, чем должны, либо иным образом не четко очерчиваете границы между этими двумя контекстами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...