web-dev-qa-db-ja.com

エラーの解決-タイプ 'Serilog.ILogger'のサービスを解決できません

ASP.NETコアアプリケーション(.NET Framework)にSeriLogを実装しようとしています

以下は、私がこれまでに実行した手順です。

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)スタートアップクラスのコンストラクタに次の行を追加しました

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

3)スタートアップクラスのconfigureメソッドに次の行を追加しました

loggerFactory.AddSerilog();

4)このようにHomeControllerにロガーを注入する-

ILogger logger;

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

5)アクションについてで、このように例外をログに記録しようとしました-

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

アプリケーションを実行すると、エラーが発生します-

System.InvalidOperationException: 'AspNetCore_SeriLog_trial1.Controllers.HomeController'をアクティブ化しようとしているときに、タイプ 'Serilog.ILogger'のサービスを解決できません。 Microsoft.Extensions.Internal.ActivatorUtilities.GetService(IServiceProvider sp、Type type、Type requiredBy、Boolean isDefaultParameterRequired)で
at lambda_method(Closure、IServiceProvider、Object [])at Microsoft.AspNetCore.Mvc.Internal.TypeActivatorCache.CreateInstance [TInstance](IServiceProvider serviceProvider、Type implementationType)at Microsoft.AspNetCore.Mvc.Controllers.DefaultControllerActivator.Create (ControllerContext controllerContext)at Microsoft.AspNetCore.Mvc.Controllers.DefaultControllerFactory.CreateController(ControllerContext context)at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__26.MoveNext()

誰かこれを手伝ってくれませんか? Serilogの設定が不足していますか?

15
Sanket

コントローラで次のことを試してください。

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

コントローラーコンストラクターにインターフェイスを挿入するのに失敗しました。

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();
0
Mselmi Ali

「Controller_Name」をアクティブ化しようとしているときに「タイプ「interface_name」のサービスを解決できません...」という問題が発生しました。

Startup.csに以下の行を追加することで、同じことを解決しました。services.AddScoped();