< Summary

Information
Class: Amusoft.Toolkit.Mvvm.Core.NavigationModel<T>
Assembly: Amusoft.Toolkit.Mvvm.Core
File(s): /home/runner/work/Amusoft.Toolkit.Mvvm/Amusoft.Toolkit.Mvvm/src/Amusoft.Toolkit.Mvvm.Core/Navigation/NavigationModel.cs
Tag: 8_14199367891
Line coverage
0%
Covered lines: 0
Uncovered lines: 18
Coverable lines: 18
Total lines: 56
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 10
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)0%620%
TryGetModelInstance(...)0%7280%

File(s)

/home/runner/work/Amusoft.Toolkit.Mvvm/Amusoft.Toolkit.Mvvm/src/Amusoft.Toolkit.Mvvm.Core/Navigation/NavigationModel.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using System.Diagnostics.CodeAnalysis;
 4using System.Linq;
 5
 6namespace Amusoft.Toolkit.Mvvm.Core;
 7
 8internal abstract class NavigationModel
 9{
 10  public NavigationModel(Type modelType)
 11  {
 12    ModelType = modelType;
 13  }
 14
 15  public Type ModelType { get; set; }
 16
 17  public abstract bool TryGetModelInstance([NotNullWhen(true)] out object? model);
 18}
 19
 20internal class NavigationModel<T> : NavigationModel where T : class
 21{
 22  private readonly IRestoreStrategy<T>[] _restoreStrategies;
 23
 024  public NavigationModel(T model, IRestoreStrategy<T>[] restoreStrategies) : base(model.GetType())
 25  {
 026    _restoreStrategies = restoreStrategies;
 027    _modelReference = new WeakReference<T>(model);
 028    foreach (var restoreStrategy in restoreStrategies)
 29    {
 030      restoreStrategy.CollectRestoreInformation(model);
 31    }
 032  }
 33
 34  private WeakReference<T> _modelReference;
 35
 36  public override bool TryGetModelInstance([NotNullWhen(true)] out object? model)
 37  {
 038    model = null;
 039    if (_modelReference.TryGetTarget(out var typedModel))
 40    {
 041      model = typedModel;
 042      return true;
 43    }
 44
 045    var restoredModel = _restoreStrategies.OrderByDescending(d => d.Priority)
 046      .FirstOrDefault()?
 047      .Recreate();
 48
 049    if (restoredModel == null)
 050      return false;
 51
 052    _modelReference = new WeakReference<T>(restoredModel);
 053    model = restoredModel;
 054    return true;
 55  }
 56}