我可以将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;
}
我可以将 Logger 注入控制器,然后将其传递给repo,但必须有一种方法将 Logger 直接注入repo但我找不到任何示例 . 我可以在回购中创建另一个 Logger 实例,但这会破坏DI的目的 . 我有同样的问题,了解如何使用DBContext执行相同的操作 .
2 回答
正如已经提到的那样,您需要首先在依赖注入(DI)容器中注册
repository
.ILoggerFactory
(因此ILogger<T>
)是framework provided injections,不需要手动添加 .Igor的答案是添加将repo添加到服务中的解决方案,否则会出错 .
“无法解析类型服务”