. NET Core - Как вы ссылаетесь на один IHostedService от другого? - PullRequest
0 голосов
/ 19 февраля 2020

В моем веб-сервисе есть две размещенные службы: Домен и ComplianceService . ComplianceService необходимо ссылаться на данные и методы в Домене , например:

public ComplianceService(ILogger<ComplianceService> logger, Domain domain, IRuleRepository ruleRepository)
{
    // Initialize the service.
    this.logger = logger;
    this.domain = domain;
    this.ruleRepository = ruleRepository;
}

Моя инициализация в файле startup.cs выглядит следующим образом:

    // Add the dependencies.
    serviceCollection.AddSingleton<RulesActivator>()
        .AddSingleton<Accruals>()
        .AddSingleton<IRuleRepository, ComplianceRuleRepository>()
        .AddSingleton<IViolation, Violation>();

    // Add the hosted services.
    serviceCollection.AddHostedService<Domain>();
    serviceCollection.AddHostedService<ComplianceService>();

Когда я пытаюсь запустить это, я получаю это сообщение:

System.InvalidOperationException: 'Unable to resolve service for type 'ThetaRex.OpenBook.ServerDomain.Domain' while attempting to activate 'ThetaRex.OpenBook.WebApi.ComplianceService'.'

Если я добавлю Домен к Io C, например:

    serviceCollection.AddSingleton<Domain>()
        .AddSingleton<RulesActivator>()
        .AddSingleton<Accruals>()
        .AddSingleton<IRuleRepository, ComplianceRuleRepository>()
        .AddSingleton<IViolation, Violation>();

Он работает, но я получаю две копии Domain . Я могу заставить его работать так:

    // Add the hosted services.
    serviceCollection.AddHostedService(sp => sp.GetRequiredService<Domain>());
    if (this.Configuration.GetValue<bool>("ComplianceEnabled"))
    {
        serviceCollection.AddHostedService<ComplianceService>();
    }

Но это кажется действительно неуклюжим и нелогичным. Почему AddHostedService может создавать экземпляр ComplianceService , но не может создавать экземпляр зависимой службы?

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