Функция Azure с EventGridTrigger предотвращает запуск метода Configure класса FunctionsStartup - PullRequest
0 голосов
/ 24 июня 2019

Я пытаюсь получить функцию, в которую вставлены зависимости, как указано в документации, Использовать внедрение зависимостей в .NET Azure Functions . Мой класс запуска определяется как:

    using System.Runtime.CompilerServices;
    using Microsoft.Azure.Functions.Extensions.DependencyInjection;
    using Microsoft.Extensions.DependencyInjection;

    [assembly: FunctionsStartup(typeof(MyFunctions.Startup))]

    namespace MyFunctions{    
      public class Startup : FunctionsStartup
      {
        public override void Configure(IFunctionsHostBuilder builder)
        {
          builder.Services.AddHttpClient();
        }
      }
    }

Я установил точку останова в операторе builder.Services.AddHttpClient(), чтобы убедиться, что DI настроен. Затем я определяю свою функцию, используя HttpTrigger:

    using System;
    using System.Net.Http;
    using Microsoft.AspNetCore.Http;
    using Microsoft.Azure.WebJobs;
    using Microsoft.Azure.WebJobs.Extensions.Http;
    using Microsoft.Extensions.Logging;

    namespace MyFunctions
    {
        public class ChangeProducer
        {
            private readonly HttpClient _httpClient;

            public ChangeProducer(IHttpClientFactory httpClientFactory)
            {
                _httpClient = httpClientFactory.CreateClient();
            }

            [FunctionName("ChangeProducer")]
            public void Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "Reservation")]HttpRequest request, ILogger log)
            {
                Console.WriteLine("foo");
            }
        }
    }

Когда я запускаю это из Visual Studio, я достигаю точки останова в Startup.Configure. Замечательно!

Затем я меняю свою функцию, чтобы использовать EventGridTrigger:

    using System;
    using System.Net.Http;
    using Microsoft.AspNetCore.Http;
    using Microsoft.Azure.WebJobs;
    using Microsoft.Azure.WebJobs.Extensions.Http;
    using Microsoft.Extensions.Logging;

    namespace MyFunctions
    {
        public class ChangeProducer
        {
            private readonly HttpClient _httpClient;

            public ChangeProducer(IHttpClientFactory httpClientFactory)
            {
                _httpClient = httpClientFactory.CreateClient();
            }

            [FunctionName("ChangeProducer")]
            public void Run([EventGridTrigger]EventGridEvent eventGridEvent, ILogger log)
            {
                Console.WriteLine("foo");
            }
        }
    }

Как только это изменение будет сделано, и никаких других изменений, я не достигну точки останова в Startup.Configure. Кроме того, я знаю, что DI не работает, потому что, когда я пытаюсь вызвать функцию, я получаю сообщение об ошибке, которое гласит:

    Executed 'ChangeProducer' (Failed, Id=06ae8b88-07c4-4150-91e5-8b88400aed72)
    Microsoft.Extensions.DependencyInjection.Abstractions: Unable to resolve service for type 'System.Net.Http.IHttpClientFactory' while attempting to activate 'MyFunctions.ChangeProducer'.

Есть ли известная проблема? Я не могу понять это. Разница лишь в типе триггера.

Обновление 2019-06-24 - это просто внедрение зависимостей

Я хочу пояснить, что проблема заключается в том, что внедрение зависимостей не работает, нет проблемы с EventGridTrigger, когда зависимость от HttpClient не внедрена. Измените конструктор на следующий, и функция будет работать нормально при срабатывании EventGridTrigger:

    public ChangeProducer()
    {
        _httpClient = new HttpClient();
    }

Ответы [ 2 ]

0 голосов
/ 28 июня 2019

Я выяснил проблему внедрения зависимостей после создания нового функционального приложения и его медленного построения и сравнения с проектом, в котором возникла проблема. Файл host.json содержал свойство с именем extensionBundle. Как только я удалил это внедрение зависимости снова начал работать. Вся собственность выглядит так:

    "extensionBundle": {
        "id": "Microsoft.Azure.Functions.ExtensionBundle",
        "version": "[1.*, 2.0.0)"
    }
0 голосов
/ 25 июня 2019

Я успешно протестировал следующие пакеты и Visual Studio 2019, версия 16.1.3.

enter image description here

В следующих фрагментах экрана показаны этапы отладки:

  1. На старте

enter image description here

  1. Вызов функции по POST

    http://localhost:7071/runtime/webhooks/EventGrid?functionName=Function1

enter image description here

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...