我有一个Azure Functions应用程序,它使用在[WebJobsStartup]中初始化的自定义参数绑定-如何将这些绑定迁移到新的[FunctionsStartup]方式?
在[WebJobsStartup]中,通过调用生成器注册绑定。带有.AddBindingRule的AddExtension
现在,新的Azure SDK说要使用[FunctionsStartup]——我该如何连接(或替换)。在这里添加BindingRule?
FunctionsStartup实现如下所示:-
[assembly: FunctionsStartup(typeof(EventSourcingOnAzureFunctions.Common.Startup))]
namespace EventSourcingOnAzureFunctions.Common
{
public class Startup
: FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
builder.AddAppSettingsToConfiguration();
// Initialise any common services
CQRSAzureBindings.InitializeServices(builder.Services);
builder.Services.AddWebJobs(ConfigureWebJobs );
}
public void ConfigureWebJobs(JobHostOptions hostOptions)
{
}
}
它用来注册绑定规则的方式如下:-
/// <summary>
/// Initailise any common dependency injection configuration settings
/// </summary>
/// <param name="context"></param>
public static void InitializeInjectionConfiguration(ExtensionConfigContext context)
{
// Set up the dependency injection stuff for the custom bindings
// 1: EventStream
context
.AddBindingRule<EventStreamAttribute>()
.BindToInput<EventStream>(BuildEventStreamFromAttribute)
;
}
如果我运行函数app,绑定规则代码不会被调用,结果函数索引失败,例如
Microsoft.Azure.WebJobs.Host: Error indexing method 'DepositMoney'.Microsoft.Azure.WebJobs.Host:无法绑定参数'bankAccountEvents'以键入EventStream。确保绑定支持参数 Type。如果使用的是绑定扩展(例如 Azure 存储、ServiceBus、计时器等),请确保已在启动代码(例如生成器)中调用了扩展的注册方法。AddAzureStorage(), builder.AddServiceBus(), builder.AddTimers() 等)。
您可以让[WebJobStartup]实例在Startup.cs中调用builder.AddExtension
在我的情况下,我需要使用 NuGet 包中的扩展
using Microsoft.Azure.WebJobs.Extensions.Kafka;
但是我经历了和你一样的情况,但是最后,我成功了:)
[assembly:
FunctionsStartup(typeof(EventSourcingOnAzureFunctions.Common.Startup))]
namespace EventSourcingOnAzureFunctions.Common
{
public class Startup
: FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
var serviceProvider = builders.Services.BuildServiceProvider();
var env = serviceProvider.GetRequiredService<IHostEnvironment>();
var appDirectory = serviceProvider.GetRequiredService<IOptions<ExecutionContextOptions>>().Value.AppDirectory;
// IWebJobsBuilders instance
var wbBuilder = builder.Services.AddWebJobs(x => { return; });
wbBuilder.AddKafka();
// And now you can use AddExtension
// wbBuilder.AddExtension
}
}
要做到这一点,您将有两个单独的启动类。一个继承自FunctionsStartup,另一个实现IWebJobStartup接口。WebJobStartup首先运行,然后是FunctionsStartup。
以下是我测试它的方式。
WebJobsStartup类
namespace CustomBinding
{
public class WebJobsStartup : IWebJobsStartup
{
void IWebJobsStartup.Configure(IWebJobsBuilder builder)
{
Debug.WriteLine("WebJobsStartup.Configure");
}
}
}
汇编信息类
using Microsoft.Azure.WebJobs.Hosting;
[assembly: WebJobsStartup(typeof(CustomBinding.WebJobsStartup))]
创业班
[assembly: FunctionsStartup(typeof(CustomBinding.Startup))]
namespace CustomBinding
{
public class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
Debug.WriteLine("FunctionsStartup.Configure");
}
}
}
我有一个时间触发的Azure功能
我想知道如何在ASP中处理依赖注入。NET核心,用于同时具有对象和字符串作为参数的类型。由于字符串无法注册到DI框架,我目前正在使用implementationfactory并使用服务定位器模式,还有其他方法吗?是否有类似于Autofac的命名参数的.WithParameter? Asp.net核心DI使得向DI框架注册一个类型变得容易(并且干净),对于那些已经向DI框架注册了参数的类型。 给定以
希望一些比我更了解Azure功能的人能提供帮助。 开箱即用,您可以使用应用程序设置中的APPINSIGHTS_INSTRUMENTATIONKEY设置登录到应用程序Insights...这将在基本级别记录函数请求,然后允许您执行等操作。 这只是被跟踪器或ilogger所掩盖。
我正在尝试为Azure Functions创建自己的自定义绑定。这项工作基于有关此功能的2篇wiki文章:https://github.com/Azure/azure-webjobs-sdk/wiki/Creating-custom-input-and-output-bindings和https://github.com/Azure/WebJobsExtensionSamples 对于示例项目,我
我有我的,我想注入它。我想使用构造函数注入,因为我是这个类的所有者: 问题是,当触发时,该构造函数的参数(即依赖项)将作为附加项从中检索。所以我的问题是,如何将从检索的这些参数提供给我的构造函数注入? 谢谢你。
问题内容: 我有许多函数结合了位置参数和关键字参数,我想将它们的参数之一绑定到给定值(仅在函数定义之后才知道)。有一般的方法吗? 我的第一次尝试是: 但是,为此,我需要知道传递给的确切args ,并且不能使用单个函数来绑定我感兴趣的所有函数(因为它们具有不同的参数列表)。 问题答案: from functools import partial >>> def f(a, b, c): … print