Возникло исключение: System.InvalidOperationException в Microsoft.Extensions.DependencyInjection - PullRequest
0 голосов
/ 09 мая 2019

Я выполняю веб-задания с использованием ядра asp.net, я не могу правильно установить внедрение зависимостей.

public static async Task Main(string[] args)
    {
            var host = BuildHost(args);

            using (host)
            {
                await host.RunAsync();
            }
    }


    public static IHost BuildHost(string[] args) =>
new HostBuilder()
    .ConfigureHostConfiguration(builder => 
    {
        builder
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json")
            .AddEnvironmentVariables();
    })
    .ConfigureWebJobs(b =>
    {
        b.AddAzureStorageCoreServices();
        b.AddAzureStorage();
        b.AddTimers();
    })
    .ConfigureServices((hostBuilderContext, services) =>
    {
        services.AddScoped<ISchedularService, SchedularService>();
        //services.AddSingleton<IHostedService, PrintTimeService>()
    }).Build();

И в файле functions.cs я получил доступ к службе планировщика вконструктор.но он не запустил конструктор и выдает исключение, например "Исключение: System.InvalidOperationException" в Microsoft.Extensions.DependencyInjection "

public class Functions
    {

    private readonly ISchedularService _schedularService;
    public Functions(SchedularService schedularService)
    {
        _schedularService = schedularService;
    }
}

1 Ответ

0 голосов
/ 15 мая 2019

Пожалуйста, убедитесь, что вы используете последние пакеты. Я использовал ваш код с последними пакетами, и он хорошо работает.

Я не использовал асинхронный метод.

       static void Main(string[] args)
        {

            var host = BuildHost(args);

            using (host)
            {
                 host.Run();
            }           
        }

        public static IHost BuildHost(string[] args) =>
            new HostBuilder()
            .ConfigureHostConfiguration(builder =>
            {
                builder.SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json")
                .AddEnvironmentVariables();
            })
            .ConfigureWebJobs(b =>
            {
                b.AddAzureStorageCoreServices();
                b.AddAzureStorage();
                b.AddTimers();
            })
            .ConfigureServices((hostBuilderContext, services) =>
            {
                services.AddScoped<IWebJobConfiguration,WebJobConfiguration>();
            })
            .Build();

В Functions.cs:

        private readonly IWebJobConfiguration _webJobConfiguration;
        public Functions(IWebJobConfiguration webJobConfiguration)
        {
            Console.WriteLine("*** DI via constructor ***");
            _webJobConfiguration = webJobConfiguration;
        }

        public void ProcessQueueMessage([QueueTrigger("queue111")] string message, ILogger logger)
        {
            Console.WriteLine(_webJobConfiguration.Message);
            Console.WriteLine(message + ";consoleqqqq");
        }

Результат:

enter image description here

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