Не удается внедрить BackgroundService в PageModel - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь использовать BackgroundService - проект ядра 2.2 для asp.net, использующий шаблон проекта страницы Razor, а не MVC. Это небольшое примерное приложение заняло у меня около 1 минуты, поэтому оно не могло быть намного проще. Глядя на отладчик, я знаю, что фоновая служба запускается и пыхтит просто отлично. Но когда я пытаюсь перейти на страницу (путь «Банан»), которая требует эту службу в качестве зависимости, я получаю InvalidOperationException: Unable to resolve service for type 'WebApplication23.DumbService' while attempting to activate 'WebApplication23.Pages.BananaModel'. Почему я не могу получить доступ к этой службе из моей модели страницы? Код на https://github.com/jmagaram/SimpleBackgroundService

У меня есть следующий сервис:

using Microsoft.Extensions.Hosting;
using System.Threading;
using System.Threading.Tasks;

namespace WebApplication23
{
    public class DumbService : BackgroundService
    {
        public DumbService()
        {

        }

        public void QueueWork()
        {

        }

        protected async override Task ExecuteAsync(CancellationToken cancellationToken)
        {
            while (!cancellationToken.IsCancellationRequested) {
                await Task.Delay(TimeSpan.FromSeconds(1));
            }
        }
    }
}

И вот где я его регистрирую:

services.AddHostedService<DumbService>();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

Вот модель страницы, которая ее использует:

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace WebApplication23.Pages
{
    public class BananaModel : PageModel
    {
        private readonly DumbService _service;

        public BananaModel(DumbService service)
        {
            _service = service;
        }

        public void OnGet()
        {

        }
    }
}

1 Ответ

0 голосов
/ 09 января 2019

Регистрация фонового сервиса на самом деле не добавляет его в набор сервисов, в основном потому, что в этом нет необходимости. Смысл фоновой службы в том, что вашему приложению не нужно об этом знать. Непонятно, почему вы думаете, что вам нужен этот сервис, но почти наверняка вам будет лучше, если вы выделите любую логику, которая вам нужна на вашей странице Razor, в отдельный класс, который может использовать и служба, и ваша страница Razor.

UPDATE

См. документацию по IHostedService, где приведен пример фоновой службы очереди . Вы заметите, что фактическая размещенная служба добавляется в очередь задач. Тогда ваше приложение также внедрит только очередь задач для планирования задач.

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