Microsoft.Azure.WebJobs.Host:无法绑定参数“ myContext”以键入DataContext。 Azure Function v2中的错误

时间:2019-02-20 04:35:42

标签: c# azure entity-framework-core azure-functions autofac

要求:创建可以注入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软件包和版本

  • Azure函数版本:2
  • Visual Studio:2017年
  • Microsoft.EntityFrameworkCore:2.1.4
  • Microsoft.EntityFrameworkCore.Design:2.1.4
  • Microsoft.EntityFrameworkCore.SqlServer:2.1.4
  • Microsoft.Extensions.DependencyInjection:2.2.0
  • Microsoft.NET.Sdk.Functions:1.0.24
  • Microsoft.NETCore.App:2.1.0

重要提示::调试器未达到Startup类!如何初始化startup类?

2 个答案:

答案 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。