Microsoft.Extensions.Logging
(請參閱source)不是ASP.NET Core的一部分,可以獨立運行。您只需註冊ILoggerFactory
和ILogger<>
接口即可。
ILoggerFactory
is used byLogger<T>
來實例化實際的記錄器。
在控制檯應用程序中使用日誌記錄擴展時,建議仍使用IServiceCollection
,因爲這允許您使用IServiceCollection
extension methods來註冊支持此模式的所有程序包。
var services = new ServiceCollection();
services.AddLogging();
// Initialize Autofac
var builder = new ContainerBuilder();
// Use the Populate method to register services which were registered
// to IServiceCollection
builder.Populate(services);
// Build the final container
IContainer container = builder.Build();
這是推薦的方法,因爲你不會想詳細哪些類需要爲具有Microsoft.Extensions.DependencyInjection
集成支持庫註冊。
但是當然您也可以手動註冊它,但是當Microsoft.Extensions.Logging
庫(添加了新的依賴項)發生更改時,您將無法獲得它,並且首先必須弄清楚或挖掘into the source code才能找到該錯誤。
builder.RegisterType<LoggerFactory>()
.As<ILoggerFactory>()
.SingleInstance();
builder.RegisterType(typeof(Logger<>))
.As(typeof(ILogger<>))
.SingleInstance();
剩下的工作就是在容器已建成或在應用程序啓動之前,之後註冊記錄類型:
var loggerFactory = container.Resolve<ILoggerFactory>();
loggerFactory.AddConsole()
.AddSerilog();
,並在您的服務注入ILogger<MyService>
如常。
你是什麼意思的「環境,LoggerFactory不存在」? LoggerFactory不是ASP.NET Core的一部分,它是Microsoft.Extensions.Logging包的一部分,請參閱https://github.com/aspnet/Logging/blob/dev/src/Microsoft.Extensions.Logging/LoggerFactory.cs – Tseng