加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

依赖注入 – 将Serilog注入存储库以进行日志记录的最佳方法

发布时间:2020-12-14 05:00:50 所属栏目:百科 来源:网络整理
导读:我可以将ILogger注入控制器,但我在尝试将其注入存储库类时遇到问题. 这是我的启动方法: public Startup(IHostingEnvironment env) { // Set up configuration sources. var builder = new ConfigurationBuilder() .AddJsonFile("appsettings.json") .AddEnv
我可以将ILogger注入控制器,但我在尝试将其注入存储库类时遇到问题.
这是我的启动方法:

public Startup(IHostingEnvironment env)
    {
        // Set up configuration sources.
        var builder = new ConfigurationBuilder()
            .AddJsonFile("appsettings.json")
            .AddEnvironmentVariables();
        Configuration = builder.Build();

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

这是在我的Configure方法中:

loggerFactory.AddConsole(Configuration.GetSection("Logging"));
        loggerFactory.AddDebug();
        loggerFactory.AddSerilog();

我的控制器:

private readonly ISkillsRepo _repo;
    private readonly ILogger _logger;

    public HistoryAndReportsController(Context db,ILogger<SkillsRepo> logger)
    {
        _repo = new SkillsRepo(db,logger);
        _logger = logger;
    }

回购:

private readonly Context _db;
    private readonly ILogger _logger;
    public SkillsRepo(Context db,ILogger<SkillsRepo> logger)
    {
        _db = db;
        _logger = logger;

    }

我可以将记录器注入控制器,然后将其传递给repo,但必须有一种方法将记录器直接注入repo但我找不到任何示例.
我可以在回购中创建另一个记录器实例,但这会破坏DI的目的.我有同样的问题,了解如何使用DBContext执行相同的操作.

解决方法

正如已经提到的那样,您需要首先在依赖注入(DI)容器中注册您的存储库.

public void ConfigureServices(IServiceCollection services)
    {
        ...
        services.AddScoped<IUserRepository,AwesomeUserRepository>();
        ...
    }

ILoggerFactory(因此ILogger< T>)是framework provided injections并且不需要手动添加.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读