Решение ошибки. Невозможно разрешить службу для типа "Serilog.ILogger"

Я пытаюсь реализовать SeriLog в основном приложении ASP.NET(.NET Framework)

Ниже приведены шаги, которые я выполнил так far-

1) Добавлены ссылки ниже в 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) Добавлены следующие строки в конструктор вашего запуска class-

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

3) Добавлена следующая строка в метод конфигурации вашего запуска class-

loggerFactory.AddSerilog();

4) Внедрение регистратора в HomeController, например this-

ILogger logger;

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

5) В разделе О действии пытается регистрировать исключение, например this-

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();
    }

При запуске моего приложения я становлюсь ниже error-

System.InvalidOperationException: невозможно разрешить службу для типа 'Serilog.ILogger' при попытке активации 'AspNetCore_SeriLog_trial1.Controllers.HomeController. в Microsoft.Extensions.Internal.ActivatorUtilities.GetService(IServiceProvider sp, тип Type, тип requiredBy, логическое значение isDefaultParameterRequired)
в lambda_method (Закрытие, IServiceProvider, Object []) в Microsoft.AspNetCore.Mvc.Internal.TypeActivatorCache.CreateInstance [TInstance] (IServiceProvider serviceProvider, Тип реализации типа) в Microsoft.AspNetCore.Mvc.Controllers.DefaultControllerActivator.Create(ControllerContext controllerContext) в Microsoft.AspNetCore.Mvc.Controllers.DefaultControllerFactory.CreateController(ControllerContext контекст) в Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__26.MoveNext()

Может ли кто-нибудь помочь мне в этом? Какие-либо настройки отсутствуют для Serilog?

Ответы

Ответ 1

Попробуйте сделать следующее в вашем контроллере.

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

Ответ 2

Я получил эту проблему "не удалось разрешить службу для типа" имя_интерфейса "при попытке активировать" имя_контроллера "....

Добавив следующую строку в файле startup.cs, я решил то же самое: services.AddScoped();

Ответ 3

Вы пропустили внедрение интерфейса в конструктор контроллера:

ILogger<HomeController> logger = null;

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

В Program.cs вы также должны добавить UseSerilog:

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