【发布时间】:2020-09-04 11:27:09
【问题描述】:
我正在尝试将 Serilog 注入到我的 .NET Core 3.1 WPF 应用程序中的类和项目中。
我正在使用 Caliburn.Micro 框架来处理 MVVM 方面的事情,Serilog Logger 已在 Bootstrapper 类中配置,我不清楚我如何注册记录器的实例以便它可用于我的应用程序中的 DI。
这是我在 Bootstrapper 类中的,我在构造函数中添加了一个简单的try-catch 以证明记录器已配置。
public class Bootstrapper : BootstrapperBase
{
private SimpleContainer _container = new SimpleContainer();
public Bootstrapper()
{
Initialize();
try
{
Log.Information("In Bootstrapper Configure method");
}
catch (Exception ex)
{
Log.Fatal(ex, "The application failed to start correctly");
}
finally
{
Log.CloseAndFlush();
}
}
protected override void Configure()
{
_container.Instance(_container);
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.File("log.txt")
.CreateLogger();
_container
.Singleton<IWindowManager, WindowManager>()
.Singleton<IEventAggregator, EventAggregator>()
_container
.PerRequest<IMyDataHandler, MyDataHandler>();
GetType().Assembly.GetTypes()
.Where(type => type.IsClass)
.Where(type => type.Name.EndsWith("ViewModel"))
.ToList()
.ForEach(viewModelType => _container.RegisterPerRequest(
viewModelType, viewModelType.ToString(), viewModelType));
}
protected override void OnStartup(object sender, StartupEventArgs e)
{
DisplayRootViewFor<ShellViewModel>();
}
protected override object GetInstance(Type service, string key)
{
return _container.GetInstance(service, key);
}
protected override IEnumerable<object> GetAllInstances(Type service)
{
return _container.GetAllInstances(service);
}
protected override void BuildUp(object instance)
{
_container.BuildUp(instance);
}
}
任何帮助或指向文档的指针都会很棒。
【问题讨论】:
-
你当前的代码有什么问题?
-
@PavelAnikhouski 我遇到的问题是,当尝试将记录器注册到容器时,它给了我错误类型名称 Logger 在类型 Log 中不存在,因此 DI 不起作用。
标签: c# .net-core caliburn.micro serilog