Я могу ввести ILogger в контроллер, но у меня возникла проблема с его введением в класс репозитория. Вот мой метод запуска:Лучший способ вставить Serilog в репозиторий для ведения журнала
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;
}
я могу вставить логгер в e, а затем передать его в репо, но должен быть способ непосредственно вставить регистратор в репо, но я не могу найти никаких примеров. Я могу создать другой экземпляр регистратора в репо, но это победит цель DI. У меня такая же проблема, как и с DBContext.
Вы можете ввести _SkillsRepo_ в конструктор вашего контроллера. Цепочка DI автоматически добавит _DBContext_ и _Logger_ в SkillsRepo. В этом случае ваш SkillsRepo должен быть зарегистрирован в Startup.cs – Igor
Спасибо Igor. Я смог заставить ваше предложение работать после того, как я добавил репо в ConfigureServices в классе Statup. services.AddScoped(); –
forwheeler