Net Core 3 - Доступ к DBContext за пределами веб-API - PullRequest
0 голосов
/ 25 апреля 2020

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

В конкретном случае c у меня есть класс с именем TelegramBot:

public class TelegramBot
{
    static ITelegramBotClient botClient;
    private readonly BotManagerContext _botManagerContext;

    public TelegramBot(BotManagerContext botManagerContext)
    {
        _botManagerContext = botManagerContext;

        botClient = new TelegramBotClient("801541652:AAHSIyedyVzIVdRM3jbvKzMdtxmn7oYcvhg");
        botClient.OnMessage += Bot_OnMessage;
        botClient.StartReceiving();
    }

Что я пытаюсь запустить вместе с веб-API. BotManagerContext - это DbContext, инициализированный в веб-интерфейсе. Я пытаюсь получить его с помощью внедрения зависимостей - поэтому я пытаюсь добавить класс TelegramBot в файл Startup.cs, чтобы он запускался как Singleton и мог получить dbcontext

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<BotManagerContext>(opt =>
              opt.UseSqlite("Data Source=BotManager.db"));
        services.AddControllers();
        services.AddSingleton<TelegramBot>();
    }

Вопрос - как мне это реализовать? используя интерфейс? Я довольно новичок в этом, и я не знаю, как это реализовать :) Спасибо

1 Ответ

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

Реализация собственного IHostedService была бы лучшим способом go по этому поводу. Для получения dbcontext в сервисе вы можете использовать IserviceProvider в качестве своей зависимости. Сервис-провайдер предоставит вам dbcontext. Вы можете настроить свою собственную размещаемую службу, которая будет добавлена ​​как одиночная. Подробности см. В этой документации:

https://docs.microsoft.com/en-us/dotnet/architecture/microservices/multi-container-microservice-net-applications/background-tasks-with-ihostedservice#implementing -ihostedservice-with-a-custom-hosted-service -хватка-класс-получение-из-фонового-service-base-class

...