我可以将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();}
这是我的配置方法:
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;
}
我可以将记录器注入控制器,然后将其传递给回购,但必须有一种方法将记录器直接注入回购,但我找不到任何示例。 我可以在回购中创建另一个记录器实例,但这会破坏DI的目的。我有同样的问题,了解如何使用DBContext执行相同的操作。
答案 0 :(得分:0)
如前所述,您需要先在依赖注入(DI)容器中注册repository
。
public void ConfigureServices(IServiceCollection services)
{
...
services.AddScoped<IUserRepository, AwesomeUserRepository>();
...
}
ILoggerFactory
(因此ILogger<T>
)为framework provided injections,无需手动添加。
答案 1 :(得分:-1)
Igor的回答是解决方案,添加了您的回购添加到服务,否则您会收到错误。
&#34;无法解决类型&#34;
的服务