С изменениями, внесенными в v3 в DI и моделью расширения для создания расширения (реализация IExtensionConfigProvider является расширением), теперь вам сначала нужно создать класс запуска, используя [сборка: WebJobsStartup] атрибут сборки и реализация интерфейса IWebJobsStartup . Там вы можете добавить свои собственные сервисы в компоновщик через builder.Services и зарегистрировать класс провайдера конфигурации вашего расширения:
[assembly: WebJobsStartup(typeof(WebJobsExtensionStartup ), "A Web Jobs Extension Sample")]
namespace ExtensionSample
{
public class WebJobsExtensionStartup : IWebJobsStartup
{
public void Configure(IWebJobsBuilder builder)
{
//Don't need to create a new service collection just use the built-in one
builder.Services.AddSingleton<CustomType>();
//Registering an extension
builder.AddExtension<InjectConfiguration>();
}
}
}
Затем в вашем IExtensionConfigProvider вы можете внедрить любые зависимости с помощью инъекций конструктора, например, binding, bindingproviders или любую другую пользовательскую зависимость. В вашем случае вы можете просто получить ссылку на встроенный IServiceProvider :
public class InjectConfiguration : IExtensionConfigProvider
{
private IServiceProvider _serviceProvider;
public InjectConfiguration(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
public void Initialize(ExtensionConfigContext context)
{
context
.AddBindingRule<InjectAttribute>()
.BindToInput<dynamic>(i => _serviceProvider.GetRequiredService(i.Type));
}
}
Чтобы хост загружал расширение, оно должно быть зарегистрировано в файле bin / extensions.json , в функциях JavaScript или Java с помощью команды установки расширений func. В C # SDK 1.0.19 просматривает время сборки для классов, связанных с WebJobsStartup атрибутом сборки в текущем проекте функции или любой зависимостью ( ProjectReference или PackageReference ) текущего проекта и создает соответствующий файл extensions.json.