Я создаю веб-задание Azure, которое будет работать непрерывно. Я хочу, чтобы веб-задание использовало тот же стиль внедрения зависимостей, что и ASP.NET Core. Я нашел этот ответ (Внедрение зависимостей с помощью SDK Azure WebJobs?) о том, как заставить DI/IoC работать с помощью пользовательского IJobActivator. Я также нашел этот ответ (Azure WebJobs — функции не найдены — как создать задание без триггера?) об использовании NoAutomaticTrigger для настройки непрерывно выполняющегося веб-задания.
Проблема в том, что подход NoAutomaticTrigger использует статические методы, что несовместимо с DI/IoC. Я предполагаю, что это связано с тем, что нет ничего, что могло бы вызвать разрешение службы с методом NoAutomaticTrigger (например, сообщение очереди). Я чувствую, что ITypeLocator может быть шагом вперед, но это всего лишь догадка.
Метод JobHost.Call, используемый в других примерах NoAutomaticTrigger, ограничен статическим методом. Как получить службу, которая разрешается через DI, которая разрешается и вызывается из вызова JobHost (или каким-либо другим методом) в Program.cs?
Решение, которое предложил Иза Эдди-сон Ацу ниже, работает, но с одним недостатком. Я привык регистрировать свои сервисы через интерфейс на сервисе. Что-то вроде
serviceCollection.AddSingleton<IApplication, Application>();
Проблема в том, что если атрибут NoAutomaticTrigger находится на интерфейсе, SDK взрывается. Решение состоит в том, чтобы добавить атрибут к классу и зарегистрировать класс как самого себя.
serviceCollection.AddSingleton<Application>();
После внесения этого изменения решение в ответе отлично работает.