Будет ли Autofa c поддерживать API IWebHostBuilder в netcore 3+? - PullRequest
0 голосов
/ 05 августа 2020

https://autofaccn.readthedocs.io/en/latest/integration/aspnetcore.html#asp - net -core-3-0-and-generi c -hosting

Похоже, Autofa c поддерживает только generi c API хостинга, IHostBuilder. Интересно, актуальна ли старая документация asp netcore 2.x для приложений asp netcore 3.

Кроме того, я обнаружил, что https://github.com/autofac/Autofac.AspNetCore давно не обновлялся время, поэтому я предполагаю, что Autofa c не намерена поддерживать IWebHostBuilder в будущем ...

Есть ли у нас какие-либо рекомендации о том, как настроить Autofa c в AspNetCore 3.x с помощью IWebHostBuilder API?

Я читал об [этом] [] сообщении, но он не отвечает на мой вопрос.

Ответы [ 2 ]

0 голосов
/ 05 августа 2020

В ASP. NET Core 3.x они изменили способ интеграции внедрения зависимостей, и, нет, документация версии 2.x больше не применяется - либо в случае Autofa c, либо в ASP. NET чехол. ASP. NET Ядро намеренно перемещено на общую модель c хостинга, где веб-хост является слоем поверх него.

Дело не в том, что Autofa c "не намерена поддерживать IWebHostBuilder ", это тот , который не вариант в ASP. NET Core 3. Он изменился на уровне фреймворка; это не то, как вы больше интегрируетесь с ASP. NET Core. Вы больше не присоединяете фабрику DI к веб-хосту, вы присоединяете ее к внешнему generi c host.

Вы делаете регистрируете вещи в своем Startup классе точно так же, как в ASP. NET Core 2.

Документы, которые вы связали с , объясняют все это и показывают примеры. Вы также можете увидеть в документах Microsoft ASP. NET Core 2 to 3 по миграции , который HostBuilder заменяет WebHostBuilder; и что WebHostBuilder, хотя он может все еще существовать, устарел, и вам не следует его использовать.

0 голосов
/ 05 августа 2020

Вы можете создать параметры конструктора, имеющие IWebHostEnvironment в классе Startup и asp. net core будет автоматически вводить IWebHostEnvironment.
Зарегистрируйте IWebHostBuilder в качестве экземпляра на ConfigureContainer.

См. Код ниже.

public class Startup
{     
    private readonly IWebHostEnvironment _environment;

    // Auto injection IWebHostEnvironment
    public Startup(IWebHostEnvironment environment)
    {        
        _environment = environment;
    }
     
    public void ConfigureServices(IServiceCollection services)
    {
        // ...
    }

    // Autofac ID
    public void ConfigureContainer(ContainerBuilder builder)
    {
        // Register your own things directly with Autofac, like:
        builder.Register<SampleClass>();
        
        // Register your IWebHostEnvironment
        builder.RegisterInstance(_environment);
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        // ...
    }
}

public class SampleClass
{
    private readonly IWebHostEnvironment _environment;

    // If you register IWebHostEnvironment on the Startup, IWebHostEnvironment will auto inject.
    public SampleClass(IWebHostEnvironment environment)
    {
        _environment = environment;
    }
}

Когда вы разрешите SampleClass, вы увидите IWebHostEnvironment автоматически вводится в конструктор.

...