代码之家  ›  专栏  ›  技术社区  ›  kudlatiger

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

  •  0
  • kudlatiger  · 技术社区  · 5 年前

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

    这是nuget包和版本

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

    重要提示: 调试器未命中 启动 startup 上课?

    0 回复  |  直到 5 年前
        1
  •  1
  •   Jerry Liu Phantom    5 年前

    假设你在处理这个包裹 Willezone.Azure.WebJobs.Extensions.DependencyInjection ,右键单击功能项目, Edit <functionProject>.csproj ,并将TargetFramework从netcoreapp2.1更改为netstandard2.0。

    <TargetFramework>netstandard2.0</TargetFramework>
    

    这种不一致性的存在是因为非官方的包没有赶上函数SDK中的更改 official guidance 正在进行中。

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

        2
  •  1
  •   NicoD    5 年前

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

    其中一些问题是产品在 瞬间。我们正在为面向客户的DI提供一流的支持 文档,包括您可以依赖的服务和官方 指导。

    一种解决办法是 IExtensionConfigProvider (见 Azure Function run code on startup )

    Integrating Simple Injector in Azure Functions

    编辑日期:2019年2月25日

    包的版本1.0.2 Microsoft.Azure.WebJobs.Script.ExtensionsMetadataGenerator