.Net Core 3.1
Niestety w przypadku ASP.NET Core 3.0 sytuacja jest nieco inna. Domyślne szablony używają HostBuilder
(zamiast WebHostBuilder
), które konfiguruje nowy ogólny host, który może obsługiwać kilka różnych aplikacji, nie ograniczając się do aplikacji internetowych. Częścią tego nowego hosta jest również usunięcie drugiego kontenera iniekcji zależności, który wcześniej istniał dla hosta internetowego. Ostatecznie oznacza to, że nie będziesz w stanie wstrzyknąć IConfiguration
do Startup
klasy żadnych zależności poza . Więc nie będziesz mógł zalogować się podczas ConfigureServices
metody. Możesz jednak wstrzyknąć rejestrator do Configure
metody i zalogować się tam:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILogger<Startup> logger)
{
logger.LogInformation("Configure called");
}
Jeśli absolutnie musisz się zalogować ConfigureServices
, możesz nadal używać programu, WebHostBuilder
który utworzy starszą wersję, WebHost
która może wstrzyknąć rejestrator do Startup
klasy. Pamiętaj, że jest prawdopodobne, że usługodawca hostingowy zostanie usunięty w pewnym momencie w przyszłości. Dlatego powinieneś spróbować znaleźć rozwiązanie, które będzie dla Ciebie odpowiednie, bez konieczności logowania się ConfigureServices
.
.NET Core 2.x
Zmieniło się to znacznie wraz z wydaniem ASP.NET Core 2,0. W ASP.NET Core 2.x rejestrowanie jest tworzone w konstruktorze hosta. Oznacza to, że rejestrowanie jest domyślnie dostępne przez DI i można je wstrzyknąć do Startup
klasy:
public class Startup
{
private readonly ILogger<Startup> _logger;
public IConfiguration Configuration { get; }
public Startup(ILogger<Startup> logger, IConfiguration configuration)
{
_logger = logger;
Configuration = configuration;
}
public void ConfigureServices(IServiceCollection services)
{
_logger.LogInformation("ConfigureServices called");
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
_logger.LogInformation("Configure called");
}
}