Почему мой EF Core DbContext не связан DI? - PullRequest
3 голосов
/ 17 мая 2019

У меня есть приложение-функция Azure с функцией, которая запускается по триггеру больших двоичных объектов. Я доказал, что эта функция может запускаться через портал Azure и реагирует на этот триггер BLOB-объектов без проблем ... или, по крайней мере, так и было.

Теперь, когда я добавил функциональность, которая использует EF Core (2.2.4), он дает мне следующую ошибку, как при локальной отладке, так и при публикации в Azure:

Microsoft.Azure.WebJobs.Host: Ошибка индексации метода «ParseThings». Microsoft.Azure.WebJobs.Host: невозможно связать параметр context с типом AvastusContext. Убедитесь, что параметр Type поддерживается привязкой. Если вы используете привязки расширений (например, хранилище Azure, ServiceBus, таймеры и т. Д.), Убедитесь, что вы вызвали метод регистрации расширений в вашем коде запуска (например, builder.AddAzureStorage (), builder.AddServiceBus ( ), builder.AddTimers () и т. д.).

У меня есть класс Startup, как указано в документации по приложению-функции Azure здесь , и я следовал их примеру до буквы, кроме следующей строки вместо их настроенных примеров служб:

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

namespace AvstFunctionApp
{
    public class Startup : FunctionsStartup
    {
        public override void Configure(IFunctionsHostBuilder builder)
        {
            builder.Services.AddDbContext<AvastusContext>(options => options.UseSqlServer(Environment.GetEnvironmentVariable("AvastusDb")));
        }
    }
}

И начало моей функции:

public static class ParseThings
{
    [FunctionName("ParseThings")]
    public static void Run([BlobTrigger("summaries/{name}", Connection = "StorageConnectionString")]Stream myBlob, string name, ILogger log, AvastusContext context)

Я могу подтвердить, что строка AddDbContext получает удар в отладчике, так что, возможно, здесь за кадром происходит какая-то ошибка, или я делаю что-то невероятно глупое.

Вещи, которые я пробовал, которые не сработали, включают:

  • Добавление .BuildServiceProvider(true) в строку AddDbContext
  • Использование WebJobsStartup вместо недавно объявленной FunctionsStartup
  • Понижение до .NET Core 2.2.0
  • Изменение класса Function и Run метода со статического на экземпляр
  • Исправление некорректного пространства имен введенного AvastusContext

Стоит также отметить, что в этом проекте приложения функций есть две другие функции, у которых, похоже, нет серьезных проблем, и я смог заставить работать инъекцию зависимостей, используя аналогичный метод с EF Core для другого ( ASP.NET Core MVC) проект в этом решении.

Заранее благодарю за любую помощь, которую кто-либо может оказать!

P.S. Я нахожу невероятно странным, что в более поздних версиях .NET Core, приложений-функций Azure и EF Core более поздних версий ничего не описывало эту ситуацию, и это заставляет меня думать, что это может быть простой ошибкой. Надеюсь, что нет.

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