web-dev-qa-db-fra.com

Résolution de l'erreur - Impossible de résoudre le service pour le type «Serilog.ILogger»

J'essaie d'implémenter SeriLog dans l'application principale ASP.NET (.NET Framework)

Voici les étapes que j'ai effectuées jusqu'à présent

1) Ajout des références ci-dessous dans Project.json

"Serilog": "2.2.0",
"Serilog.Extensions.Logging": "1.2.0",
"Serilog.Sinks.RollingFile": "2.0.0",
"Serilog.Sinks.File": "3.0.0"

2) Ajout des lignes suivantes au constructeur de votre classe de démarrage -

Log.Logger = new LoggerConfiguration()
           .MinimumLevel.Debug()
           .WriteTo.RollingFile(Path.Combine(env.ContentRootPath, "log-{Date}.txt"))
           .CreateLogger();

3) Ajout de la ligne suivante à la méthode configure de votre classe de démarrage -

loggerFactory.AddSerilog();

4) Injecter l'enregistreur à HomeController comme ceci-

ILogger logger;

    public HomeController(ILogger logger)
    {
        this.logger = logger;
    }

5) Dans l'action À propos, essayez de consigner une exception comme celle-ci-

public IActionResult About()
    {
        ViewData["Message"] = "Your application description page.";

        try
        {
            throw new Exception("Serilog Testing");
        }
        catch (System.Exception ex)
        {
            this.logger.Error(ex.Message);
        }

        return View();
    }

En exécutant mon application, j'obtiens en dessous de l'erreur-

System.InvalidOperationException: impossible de résoudre le service pour le type "Serilog.ILogger" lors de la tentative d'activation de "AspNetCore_SeriLog_trial1.Controllers.HomeController". sur Microsoft.Extensions.Internal.ActivatorUtilities.GetService (IServiceProvider sp, Type type, Type requiredBy, Boolean isDefaultParameterRequired)
chez lambda_method (Closure, IServiceProvider, Object []) chez Microsoft.AspNetCore.Mvc.Internal.TypeActivatorCache.CreateInstance [TInstance] (IServiceProvider serviceProvider, Type implementationType) chez Microsoft.AspNetCore.Mvc.Controllers.DefaultController.Default (ControllerContext controllerContext) sur Microsoft.AspNetCore.Mvc.Controllers.DefaultControllerFactory.CreateController (contexte ControllerContext) sur Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__26.MoveNext ()

Quelqu'un pourrait-il m'aider à ce sujet? Une configuration manquante pour Serilog?

15
Sanket

Essayez de faire la chose suivante dans votre contrôleur.

    ILogger<HomeController> logger = null;
    public HomeController(ILogger<HomeController> _logger)
    {
        logger = _logger;
    }
25
dotnetstep

Vous avez manqué d'injecter votre interface dans le constructeur du contrôleur:

ILogger<HomeController> logger = null;

public HomeController(ILogger<HomeController> _logger)
{
    logger = _logger;
}

Dans le Program.cs, vous devez également ajouter UseSerilog:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .UseStartup<Startup>()
        .UseSerilog();
0
Mselmi Ali

J'obtenais ce problème "impossible de résoudre le service pour le type" nom_interface "en essayant d'activer" Nom_contrôleur "....

En ajoutant la ligne ci-dessous dans startup.cs, j'ai résolu le même problème: services.AddScoped ();

0