0

作为给 null 它给出的值不能为 null。(参数“记录器”)错误。 即使给出模型实例,它仍然保持为空

 public class MyController : Controller
    {
            public MyController(ILogger<MyController> logger)
            {
              logger.LogInformation("Log Testing");
            }

            public ActionResult List()
            {
                int Id = 5;
                MyModel model = new MyModel(null);
                model.GetItem(Id);
                return View("List", model);
            }
    }

public class MyModal:BaseModel
{
    private readonly ILogger<MyModal> _logger;
    public MyModel(ILogger<MyModel> logger) 
        {
           this._logger = logger;
        }

    public MyModel GetItem (Int Id)
    {
      try
      {
        //My Code
      }
      catch(Exception e){
       _logger.LogError(e.Message);
      }
    }
}

根据建议我编辑了我的问题

4

1 回答 1

3

正如评论中所建议的:

  1. ILoggerFactory将其注入MyController并存储在字段变量中(例如_loggerFactory)。
  2. 使用工厂MyModel在您的List方法中构造一个记录器:ILogger<MyModel> modelLogger = _loggerFactory.CreateLogger<MyModel>();
  3. 将其传递给MyModel构造函数:MyModel model = new MyModel(modelLogger);

例子:

public class MyController
{
    private readonly ILogger _logger;
    private readonly ILoggerFactory _loggerFactory;
    
    public MyController(ILogger<MyController> logger, ILoggerFactory loggerFactory)
    {
        _logger = logger;
        _loggerFactory = loggerFactory;
    }

    public ActionResult List()
    {
        int Id = 5;
        ILogger<MyModel> modelLogger = _loggerFactory.CreateLogger<MyModel>();
        MyModel model = new MyModel(modelLogger);
        model.GetItem(Id);
        return View("List", model);
    }
}

在线尝试

于 2021-08-30T08:02:05.547 回答