Код: Выделить всё
using Microsoft.Extensions.Logging;
public class Foo
{
private readonly ILogger _logger;
public Foo(ILogger logger) =>
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
}
Код: Выделить всё
using Serilog;
public class Foo
{
private readonly ILogger _logger;
public Foo(ILogger logger) =>
_logger = logger?.ForContext() ?? throw new ArgumentNullException(nameof(logger));
}
Я бы хотел это сделать:
Код: Выделить всё
using Serilog;
public class Foo
{
private readonly ILogger _logger;
public Foo(ILogger logger) =>
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
}
Поэтому любой вариант этого не будет работать:
Код: Выделить всё
// ILogger`T.cs
using Serilog;
public interface ILogger : ILogger { }
// Program.cs
builder.Services.AddTransient(
typeof(Serilog.ILogger),
sp => sp.GetRequiredService().ForContext()
);
(Без отражения, как в нетривиальной системе, ожидается очень большое количество разрешений регистратора в секунду и без статического класса Serilog.Log, поскольку я предпочитаю идиоматический подход .NET.)
Подробнее здесь: https://stackoverflow.com/questions/792 ... ia-factory
Мобильная версия