Microsoft.Azure.WebJobs.Host: Невозможно привязать параметр «myContext» к типу DataContext.ошибка в функции Azure v2 - PullRequest
0 голосов
/ 20 февраля 2019

Требование: создать функцию Azure, которая может внедрить Entity Framework контекст в метод Run с использованием внедрения зависимостей.

Вот мой Startup класс

   [assembly: WebJobsStartup(typeof(Startup))]
   namespace MessagesToSqlDbFuncApp
   {
       internal class Startup : IWebJobsStartup
       {
        public void Configure(IWebJobsBuilder builder) =>
        builder.AddDependencyInjection<ServiceProviderBuilder>();
       }
   }

Вот ServiceProviderBuilder class

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)
    {

    }

Вот ошибка, которая выдается при запуске функции

[20.02.2017 4: 25: 10 AM] Ошибка индексации метода «MessagesToSqlDbFuncApp» [20.02.2009 4:25:10] 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.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 голосов
/ 20 февраля 2019

Предположим, вы работаете с пакетом Willezone.Azure.WebJobs.Extensions.DependencyInjection, щелкните правой кнопкой мыши на функциональном проекте Edit <functionProject>.csproj и измените TargetFramework с netcoreapp2.1 на netstandard2.0.

<TargetFramework>netstandard2.0</TargetFramework>

Несоответствие существует, потому чтоНеофициальный пакет не догоняет изменения в Function SDK, официальное руководство находится в процессе.

Большинство основных частей для добавления этой поддержки уже сделано.Мы окажемся в лучшем положении, чтобы предоставить ETA для этого, когда будут завершены последние элементы SDK.

0 голосов
/ 20 февраля 2019

Есть проблемы с классом запуска и функцией Azure.См. Функция Azure Публикация, не создавая запись класса Startup в extensions.json

Некоторые из этих проблем - известные ограничения продукта на данный момент.Мы работаем над первоклассной поддержкой функций DI, ориентированных на клиента, в функциях Azure, которые будут поставляться с полным набором документации, включая сервисы, на которые вы можете положиться, и официальным руководством.

Одним из решений является использованиеIExtensionConfigProvider (см. Код запуска функции Azure при запуске )

Лично я только что использовал статический конструктор для инициализации и использования функции Azure в качестве простого объекта, как описано здесь: Интеграция простого инжектора в функции Azure

Изменить 25/02/2019

Версия 1.0.2 пакета Microsoft.Azure.WebJobs.Script.ExtensionsMetadataGenerator устраняет проблему с привязкой в ​​extensions.json.В Microsoft.NET.Sdk.Functions должна быть включена последняя версия ExtensionsMetadataGenerator.

...