MvvmCross 7如何在WPF (.net Core 3.1)应用程序中设置seriog



我在这里的第一个帖子,希望我能问一个有价值的问题,如果答案可能会帮助我和其他人理解MvvmCross的复杂性。

我有一个问题,熟悉MvvmCross框架的人。我正在使用MvvmCross 7.1.2版本,我正在尝试在我的WPF (.net Core 3.1)应用程序中设置Serilog日志。

项目结构是典型的MvvmCross:项目。Core .net standard 2.0;项目。Wpf .net Core 3.1

我在Project中创建了Setup.cs类。Wpf项目,从MvxWpfSetup继承和覆盖两个方法GetDefaultProviderType()和CreateLogProvider()根据MvvmCross文档:

public class Setup : MvxWpfSetup
{
public override MvxLogProviderType GetDefaultLogProviderType() => MvxLogProviderType.Serilog;
protected override IMvxApplication CreateApp()
{
throw new NotImplementedException();
}
protected override IMvxLogProvider CreateLogProvider()
{
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.File($"{Directory.GetCurrentDirectory()}\my_log.log")
.CreateLogger();
return base.CreateLogProvider();
}
}

App.xaml.cs是标准的,在引入记录器时我没有改变任何东西:

public partial class App : MvxApplication
{
protected override void RegisterSetup()
{
this.RegisterSetupType<MvxWpfSetup<Core.App>>();
}
}

在项目。Core in app .cs我只注册app start:

public class App : MvxApplication
{
public override void Initialize()
{
RegisterAppStart<LoginViewModel>();
}
}

在项目。我使用构造函数注入来获取记录器:

public class LoginViewModel : MvxViewModel
{
#region Fields
private readonly IMvxLog _log;
#endregion
public LoginViewModel(IMvxNavigationService navigationService, IMvxLogProvider log)
{
_log = log.GetLogFor<LoginViewModel>();
}
}

当我使用_log.Info("Log this information.");在调试模式下,我看到日志记录器是"彩色控制台"而不是Serilog - Setup.cs从未执行,日志记录器没有创建。

问题:如何使用Setup.cs?它需要初始化吗?我遗漏了什么?

问候,卡罗尔

答案是app . example .cs中的那一行:

MvxWpfSetupSingleton.EnsureSingletonAvailable(Dispatcher, MainWindow);

它'初始化' Setup.cs和记录器。

最新更新