Я использую функции Azure версии 2.x. Он имеет встроенную поддержку для внедрения зависимостей .
Таким образом, я могу зарегистрировать свой сервис IMyService для DI в одноэлементной области, используя:
public class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
builder.Services.AddSingleton<IOther, DefaultOther>();
builder.Services.AddSingleton<IMyService, DefaultMyService>(); // IMyService depends on IOther.
}
}
Экземпляр DefaultMyService
создается при первом запуске функции. Это означает, что первый запрос медленнее, потому что он выполняет тяжелую инициализацию, которая происходит внутри DefaultMyService
(он заполняет кэш и т. Д.).
Вопрос: есть ли способ создать DefaultMyService
раньше, чем первый запрос?
A аналогичный вопрос был задан для ядра asp.net, и ответы там предлагают несколько решений, но ни одно из них не работает в контексте приложения-функции:
Вариант 1: создать экземпляр моей службы (здесь происходит инициализация), а затем зарегистрировать экземпляр (вместо регистрации типа)
var foo = new Foo();
services.AddSingleton<IFoo>(foo);
Это не работает, потому что в моем случае IMyService
зависит от других служб, которые не создаются в тот момент, когда я регистрирую IMyService
в методе Configure
. Сбой с ошибкой, которая описана здесь .
Вариант 2: Другое предложение заключается в использовании перегруженного метода настройки:
public void Configure(IApplicationBuilder app, IFoo foo)
{
...
}
Это также не работает, потому что в случае приложения-функции единственный выполняемый метод configure - это Configure(IFunctionsHostBuilder builder)
, а другие перегрузки не вызываются.