要求:创建可以注入Entity Framework
上下文的Azure函数
使用依赖注入的Run
方法。
这是我的Startup
班
[assembly: WebJobsStartup(typeof(Startup))]
namespace MessagesToSqlDbFuncApp
{
internal class Startup : IWebJobsStartup
{
public void Configure(IWebJobsBuilder builder) =>
builder.AddDependencyInjection<ServiceProviderBuilder>();
}
}
这是ServiceProviderBuilder
类
public class ServiceProviderBuilder : IServiceProviderBuilder
{
public IServiceProvider Build()
{
IConfigurationRoot config = new ConfigurationBuilder()
.SetBasePath(Environment.CurrentDirectory)
.AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
var connectionString = config.GetConnectionString("SqlConnectionString");
var services = new ServiceCollection();
services.AddDbContext<DataContext>(options => options.UseSqlServer(connectionString));
return services.BuildServiceProvider(true);
}
}
这是我的职责
[FunctionName("MessagesToSqlDbFuncApp")]
public static async Task Run([BlobTrigger("messagecontainer/{name}", Connection = "AzureWebJobsStorage")]
Stream myBlob,
string name,
ILogger log,
[Inject] DataContext myContext)
{
}
这是运行功能时抛出的错误
[2/20/2019 4:25:10 AM]错误索引方法'MessagesToSqlDbFuncApp' [2/20/2019 4:25:10 AM] Microsoft.Azure.WebJobs.Host:错误索引方法'BlobQCMessagesToSqlDbFuncApp'。 Microsoft.Azure.WebJobs.Host:无法绑定参数“ myContext”以键入DataContext。确保绑定支持参数类型。如果您使用绑定扩展(例如Azure存储,ServiceBus,Timer等),请确保已在启动代码中调用了扩展的注册方法(例如builder.AddAzureStorage(),builder.AddServiceBus( ),builder.AddTimers()等)。
这是nuget软件包和版本
重要提示::调试器未达到Startup
类!如何初始化startup
类?
答案 0 :(得分:1)
启动类和天蓝色函数存在问题。参见Azure function Publish not creating Startup class entry in extensions.json
其中一些问题是产品已知的局限性 时刻。我们正在为面向客户的DI提供一流的支持 Azure Functions中的功能,它将附带全套 文档,包括您可以依赖和官方提供的服务 指导。
一种解决方案是使用IExtensionConfigProvider
(请参见Azure Function run code on startup)
我个人最终只是使用静态构造函数进行初始化,并使用azure函数作为谦虚对象,如下所述:Integrating Simple Injector in Azure Functions
编辑25/02/2019
软件包Microsoft.Azure.WebJobs.Script.ExtensionsMetadataGenerator的1.0.2版本修复了extensions.json中的绑定问题。 Microsoft.NET.Sdk.Functions应该很快包含ExtensionsMetadataGenerator的最新版本。
答案 1 :(得分:0)
假设您使用软件包Willezone.Azure.WebJobs.Extensions.DependencyInjection
,右键单击功能项目Edit <functionProject>.csproj
,然后将TargetFramework从netcoreapp2.1更改为netstandard2.0。
<TargetFramework>netstandard2.0</TargetFramework>
之所以存在不一致,是因为非官方程序包无法赶上Function SDK中的更改,official guidance正在进行中。
添加此支持的大多数核心部分都已完成。一旦完成最后一个SDK项,我们将可以更好地提供ETA。