Microsoft.Azure.WebJobs.Host:无法将参数'myContext'绑定到DataContext类型。 Azure Function v2中的错误

问题描述 投票:0回答:2

要求:创建Azure功能,可以使用依赖注入将Entity Framework上下文注入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类型。确保绑定支持参数Type。如果您正在使用绑定扩展(例如Azure存储,ServiceBus,计时器等),请确保已在启动代码中调用扩展的注册方法(例如builder.AddAzureStorage(),builder.AddServiceBus( ),builder.AddTimers()等)。

这是nuget包和版本

  • Azure功能版本:2
  • Visual Studio:2017
  • Microsoft.EntityFrameworkCore:2.1.4
  • Microsoft.entity framework core.design: 2.1.4
  • Microsoft.EntityFrameworkCore.SqlServer:2.1.4
  • Microsoft.Extensions.DependencyInjection:2.2.0
  • Microsoft.NET.Sdk.Functions:1.0.24
  • Microsoft.net core.app: 2.1.0

重要说明:调试器没有达到Startup类!如何初始化startup类?

c# azure entity-framework-core azure-functions autofac
2个回答
0
投票

假设您使用包Willezone.Azure.WebJobs.Extensions.DependencyInjection,右键单击您的函数项目Edit <functionProject>.csproj,并将TargetFramework从netcoreapp2.1更改为netstandard2.0。

<TargetFramework>netstandard2.0</TargetFramework>

存在不一致是因为非官方软件包没有赶上功能SDK中的更改,official guidance正在进行中。

添加此支持的大多数核心部分都已完成。完成最后一个SDK项目后,我们将能够更好地提供ETA。


1
投票

启动类和azure函数存在问题。见Azure function Publish not creating Startup class entry in extensions.json

其中一些问题是目前产品的已知限制。我们正在为Azure功能中面向客户的DI功能提供一流的支持,该功能将提供一整套文档,包括您可以依赖的服务和官方指导。

一种解决方案是使用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。

© www.soinside.com 2019 - 2024. All rights reserved.