我在这里的第一个帖子,希望我能问一个有价值的问题,如果答案可能会帮助我和其他人理解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和记录器。