MvvmCross 自定义日志提供程序

Nic*_*liu 0 c# logging mvvmcross xamarin

我正在尝试实现我自己的日志提供程序。

Setup.cs 包含:

protected override MvxLogProviderType GetDefaultLogProviderType() => MvxLogProviderType.None;

protected override IMvxLogProvider CreateLogProvider()
{
    var logger = new Logger();
    return base.CreateLogProvider();
}
Run Code Online (Sandbox Code Playgroud)

记录器

public class Logger : IMvxLog
{
    public bool Log(MvxLogLevel logLevel, Func<string> messageFunc, Exception exception = null, params object[] formatParameters)
    {
        var client = new HttpClient();
        var url = new Uri("https://jsonplaceholder.typicode.com/posts/1");
        client.PostAsync(url,null);
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

当 IoC 尝试解决依赖关系时,它会与 ViewModel 构造函数一起崩溃。

错误信息:

创建 eOrder.ViewModel.ActivitiesViewModel 时无法解析类型为 IMvxLog 的参数日志的参数

也许我不需要覆盖MvxLogProviderType.None

Mar*_*n00 5

您将 base 返回,CreateLogProvider()并且由于您将 设置GetDefaultLogProviderTypeNone,因此将返回null

第二个问题是你实现了IMvxLog,而不是IMvxLogProvider。尝试实现那个,并在设置而不是基础中返回它。

更多信息请访问:https : //www.mvvmcross.com/documentation/fundamentals/logging#customize-the-log-provider

并不是说那里的自定义示例代码使用 Serilog,并且正在访问静态实例。

protected override IMvxLogProvider CreateLogProvider()
{
    Log.Logger = new LoggerConfiguration()
                .MinimumLevel.Debug()
                .WriteTo.LiterateConsole()
                .WriteTo.AndroidLog()
                .CreateLogger();
    return base.CreateLogProvider();
}
Run Code Online (Sandbox Code Playgroud)