web-dev-qa-db-fra.com

Aucun service pour le type «Microsoft.Extensions.Logging.ILoggingBuilder» n'a été enregistré

Je construis de toutes nouvelles API Web avec .NET core 2.2. Dans mon Startup.cs J'ai défini ILoggerFactory dans la méthode configure. Quand je fais une telle chose et ajoute le code suivant

loggerFactory.AddConsole();
loggerFactory.AddDebug();

Je reçois des informations disant que cette méthode est obsolète et qu'elle sera supprimée dans les futures versions, à la place, je devrais utiliser ILoggingBuilder. Pas de problème, j'ai remplacé par cette nouvelle méthode de journalisation et dès que je démarre les API Web, je reçois Erreur

InvalidOperationException: aucun service pour le type "Microsoft.Extensions.Logging.ILoggingBuilder" n'a été enregistré.

et ma fenêtre de sortie montre cela

Impossible de résoudre un service de type "Microsoft.Extensions.Logging.ILoggingBuilder" pour le paramètre "loggingBuilder" de la méthode.

Je suis nouveau sur .NET core, mais ai-je raté quelque chose ici? Avec ILoggerFactury, je n'ai pas eu à enregistrer de services et la journalisation fonctionnerait très bien. la documentation de Microsoft ici n'est pas vraiment utile.

Startup.cs ressemble à ceci:

public class Startup
{
    // This method gets called by the runtime. Use this method to add services to the container.
    // For more information on how to configure your application, visit https://go.Microsoft.com/fwlink/?LinkID=398940
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggingBuilder loggingBuilder)
    {
        loggingBuilder.AddConsole();
        loggingBuilder.AddDebug();

        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler();
        }
        app.UseMvc();

        //app.Run(async (context) =>
        //{
        //    await context.Response.WriteAsync("Hello World!");
        //});
    }
}

Program.cs ressemble à ceci:

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
}
9
zuboje

Cela ne fonctionne pas car vous n'enregistrez pas les composants de journalisation avec votre conteneur d'injection de dépendance. Vous pouvez procéder de deux manières:

Soit le configurer dans le cadre de CreateWebHostBuilder:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .ConfigureLogging((hostingContext, logging) =>
        {
            logging.AddConsole();
            logging.AddDebug();
        })
        .UseStartup<Startup>();

Ou bien, enregistrez-le avec votre collection de services sous ConfigureServices:

services.AddLogging(logging =>
{
    logging.AddConsole();
    logging.AddDebug();
});
18
John