如何使用 Binder 在我的 C# 函数中执行动态绑定?
How do I use Binder to perform dynamic bindings in my C# Function?
我需要绑定到输出 blob,但 blob 路径需要在我的函数中动态计算。我该怎么做?
Binder
是一种高级绑定技术,允许您在代码中 强制性地 执行绑定,而不是通过 声明性地 function.json
元数据文件。如果绑定路径或其他输入的计算需要在运行时在您的函数中发生,您可能需要这样做。请注意,当使用 Binder
参数时,您 不应 在 function.json
中包含该参数的相应条目。
在下面的示例中,我们动态绑定到 blob 输出。如您所见,因为您是在代码中声明绑定,所以您的路径信息可以按您希望的任何方式计算。请注意,您也可以绑定到任何其他原始绑定属性(例如 QueueAttribute
/EventHubAttribute
/ServiceBusAttribute
/等)。您也可以迭代绑定多次。
请注意,传递给 BindAsync
的类型参数(在本例中为 TextWriter
)必须是目标绑定支持的类型。
using System;
using System.Net;
using Microsoft.Azure.WebJobs;
public static async Task<HttpResponseMessage> Run(
HttpRequestMessage req, Binder binder, TraceWriter log)
{
log.Verbose($"C# HTTP function processed RequestUri={req.RequestUri}");
// determine the path at runtime in any way you choose
string path = "samples-output/path";
using (var writer = await binder.BindAsync<TextWriter>(new BlobAttribute(path)))
{
writer.Write("Hello World!!");
}
return new HttpResponseMessage(HttpStatusCode.OK);
}
这里是相应的元数据:
{
"bindings": [
{
"name": "req",
"type": "httpTrigger",
"direction": "in"
},
{
"name": "res",
"type": "http",
"direction": "out"
}
]
}
有些绑定重载采用 数组 属性。在您需要控制目标存储帐户的情况下,您可以传入一组属性,从绑定类型属性(例如 BlobAttribute
)开始,并包含指向要使用的帐户的 StorageAccountAttribute
实例。例如:
var attributes = new Attribute[]
{
new BlobAttribute(path),
new StorageAccountAttribute("MyStorageAccount")
};
using (var writer = await binder.BindAsync<TextWriter>(attributes))
{
writer.Write("Hello World!");
}
已合并此帖子和其他帖子中的所有信息以及评论,并创建了一个 blog post 来演示如何在真实场景中使用 Binder。感谢@mathewc,这成为可能。
我需要绑定到输出 blob,但 blob 路径需要在我的函数中动态计算。我该怎么做?
Binder
是一种高级绑定技术,允许您在代码中 强制性地 执行绑定,而不是通过 声明性地 function.json
元数据文件。如果绑定路径或其他输入的计算需要在运行时在您的函数中发生,您可能需要这样做。请注意,当使用 Binder
参数时,您 不应 在 function.json
中包含该参数的相应条目。
在下面的示例中,我们动态绑定到 blob 输出。如您所见,因为您是在代码中声明绑定,所以您的路径信息可以按您希望的任何方式计算。请注意,您也可以绑定到任何其他原始绑定属性(例如 QueueAttribute
/EventHubAttribute
/ServiceBusAttribute
/等)。您也可以迭代绑定多次。
请注意,传递给 BindAsync
的类型参数(在本例中为 TextWriter
)必须是目标绑定支持的类型。
using System;
using System.Net;
using Microsoft.Azure.WebJobs;
public static async Task<HttpResponseMessage> Run(
HttpRequestMessage req, Binder binder, TraceWriter log)
{
log.Verbose($"C# HTTP function processed RequestUri={req.RequestUri}");
// determine the path at runtime in any way you choose
string path = "samples-output/path";
using (var writer = await binder.BindAsync<TextWriter>(new BlobAttribute(path)))
{
writer.Write("Hello World!!");
}
return new HttpResponseMessage(HttpStatusCode.OK);
}
这里是相应的元数据:
{
"bindings": [
{
"name": "req",
"type": "httpTrigger",
"direction": "in"
},
{
"name": "res",
"type": "http",
"direction": "out"
}
]
}
有些绑定重载采用 数组 属性。在您需要控制目标存储帐户的情况下,您可以传入一组属性,从绑定类型属性(例如 BlobAttribute
)开始,并包含指向要使用的帐户的 StorageAccountAttribute
实例。例如:
var attributes = new Attribute[]
{
new BlobAttribute(path),
new StorageAccountAttribute("MyStorageAccount")
};
using (var writer = await binder.BindAsync<TextWriter>(attributes))
{
writer.Write("Hello World!");
}
已合并此帖子和其他帖子中的所有信息以及评论,并创建了一个 blog post 来演示如何在真实场景中使用 Binder。感谢@mathewc,这成为可能。