【发布时间】:2018-08-31 23:13:26
【问题描述】:
我们使用与 IExtensionConfigProvider 的参数绑定在 Azure 函数(netstandard20 上的 v2)中使用依赖注入。在将 Microsoft.NET.Sdk.Functions 从 1.0.13 升级到 1.0.19(这迫使 Microsoft.Azure.Webjobs.Host 升级到 v3)之后,这不再起作用。我不能再在 IExtensionConfigProvider.Initialize 函数中遇到断点了。相同版本的 Functions SDK 适用于具有目标框架 net462 的示例项目,它使用 Microsoft.Azure.WebJobs v2。
这是它在运行时给出的错误:
错误索引方法“Function1.Run”。 Microsoft.Azure.WebJobs.Host: 无法将参数“customThing”绑定到自定义类型。确保 绑定支持参数类型。
下面是示例应用的代码:
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));
}
}
【问题讨论】:
-
嗨,Tom,github 上有活跃的讨论:github.com/Azure/azure-functions-core-tools/issues/…
标签: c# azure azure-functions