IExtensionConfigProvider não inicializando ou vinculando com Microsoft.Azure.WebJobs v3
Usamos injeção de dependência em nossa Função do Azure (v2 na netstandard20) usando a ligação de parâmetro com IExtensionConfigProvider. Após a atualização do Microsoft.NET.Sdk.Functions de 1.0.13 para 1.0.19 (que forçou uma atualização do Microsoft.Azure.Webjobs.Host para a v3), isso não funciona mais. Não consigo mais atingir um ponto de interrupção na minha função IExtensionConfigProvider.Initialize. A mesma versão do SDK do Functions funciona bem para um projeto de amostra com a estrutura de destino net462, para a qual ele usa o Microsoft.Azure.WebJobs v2.
Aqui está o erro que ele fornece no tempo de execução:
Erro ao indexar o método 'Function1.Run'. Microsoft.Azure.WebJobs.Host: Não é possível vincular o parâmetro 'customThing' ao tipo CustomType. Verifique se o parâmetro Type é suportado pela ligação.
E aqui está o código para o aplicativo de exemplo:
public static class Function1
{
[FunctionName("ThisFunction")]
public static async Task Run(
[TimerTrigger("0 */1 * * * *")]TimerInfo timer,
[Inject(typeof(CustomType))] CustomType customThing,
ExecutionContext context)
{
Console.WriteLine(customThing.GetMessage());
}
}
public class CustomType
{
public string GetMessage() => "Hi";
}
[Binding]
[AttributeUsage(AttributeTargets.Parameter)]
public class InjectAttribute : Attribute
{
public Type Type { get; }
public InjectAttribute(Type type) => Type = type;
}
public class InjectConfiguration : IExtensionConfigProvider
{
private IServiceProvider _serviceProvider;
public void Initialize(ExtensionConfigContext context)
{
var services = new ServiceCollection();
services.AddSingleton<CustomType>();
_serviceProvider = services.BuildServiceProvider(true);
context
.AddBindingRule<InjectAttribute>()
.BindToInput<dynamic>(i => _serviceProvider.GetRequiredService(i.Type));
}
}