Skip to content

Commit 5b775e3

Browse files
fix: Fix Nullability Issues (#370)
* fix: Fix nullability issues * build(deps): bump Nerdbank.GitVersioning from 3.3.37 to 3.4.194 in /src Bumps [Nerdbank.GitVersioning](https://github.com/dotnet/Nerdbank.GitVersioning) from 3.3.37 to 3.4.194. - [Release notes](https://github.com/dotnet/Nerdbank.GitVersioning/releases) - [Commits](dotnet/Nerdbank.GitVersioning@v3.3.37...v3.4.194) Signed-off-by: dependabot[bot] <support@github.com> * Create nuget.config * Fix a few more compile time issues * Fix a few more issues * Use lazy dependency resolution * Delete the obsolete class * Remove the obsolete helper from approval tests * Dump vishual shtudio Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
1 parent a05e65e commit 5b775e3

11 files changed

+70
-158
lines changed

nuget.config

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<!--
3+
DO NOT REMOVE THIS FILE
4+
There is an issue where the nuget config local cache can play up.
5+
Already had similar issues with the local cache and it containing netcore 3.1 packages.
6+
https://github.com/actions/virtual-environments/issues/1090
7+
-->
8+
<configuration>
9+
<packageSources>
10+
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
11+
</packageSources>
12+
</configuration>

src/Directory.build.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949

5050
<ItemGroup>
5151
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0" PrivateAssets="All"/>
52-
<PackageReference Include="Nerdbank.GitVersioning" Version="3.3.37" PrivateAssets="all" />
52+
<PackageReference Include="Nerdbank.GitVersioning" Version="3.4.194" PrivateAssets="all" />
5353
</ItemGroup>
5454

5555
<ItemGroup>

src/Sextant.Avalonia/DependencyResolverMixins.cs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,15 @@ public static IMutableDependencyResolver RegisterNavigationView<TView>(
4141
/// <returns>The dependency resolver for builder use.</returns>
4242
public static IView GetNavigationView(
4343
this IReadonlyDependencyResolver dependencyResolver,
44-
string? contract = null) =>
45-
dependencyResolver.GetService<IView>(contract ?? "NavigationView");
44+
string? contract = null)
45+
{
46+
var view = dependencyResolver.GetService<IView>(contract ?? "NavigationView");
47+
if (view is null)
48+
{
49+
throw new InvalidOperationException("NavigationView not registered.");
50+
}
51+
52+
return view;
53+
}
4654
}
4755
}

src/Sextant.XamForms.Tests/API/ApiApprovalTests.SextantXamForms.net5.0.approved.txt

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -28,21 +28,4 @@ namespace Sextant.XamForms
2828
{
2929
public static void InitializeForms(this Sextant.Sextant sextant) { }
3030
}
31-
public static class SextantHelper
32-
{
33-
[System.Obsolete("Use the Initialize method.")]
34-
public static Sextant.XamForms.NavigationView Initialise<TViewModel>(System.Reactive.Concurrency.IScheduler? mainThreadScheduler = null, System.Reactive.Concurrency.IScheduler? backgroundScheduler = null, ReactiveUI.IViewLocator? viewLocator = null)
35-
where TViewModel : class, Sextant.IViewModel { }
36-
[System.Obsolete("Use the dependency resolver mixins.")]
37-
public static Sextant.XamForms.NavigationView Initialize<TViewModel>(System.Reactive.Concurrency.IScheduler? mainThreadScheduler = null, System.Reactive.Concurrency.IScheduler? backgroundScheduler = null, ReactiveUI.IViewLocator? viewLocator = null)
38-
where TViewModel : class, Sextant.IViewModel { }
39-
[System.Obsolete("Use the dependency resolver mixins.")]
40-
public static void RegisterNavigation<TView, TViewModel>(System.Reactive.Concurrency.IScheduler? mainThreadScheduler = null, System.Reactive.Concurrency.IScheduler? backgroundScheduler = null, ReactiveUI.IViewLocator? viewLocator = null)
41-
where TView : ReactiveUI.IViewFor
42-
where TViewModel : class, Sextant.IViewModel { }
43-
[System.Obsolete("Use the dependency resolver mixins.")]
44-
public static void RegisterView<TView, TViewModel>(string? contract = null)
45-
where TView : ReactiveUI.IViewFor, new ()
46-
where TViewModel : class, Sextant.IViewModel { }
47-
}
4831
}

src/Sextant.XamForms.Tests/API/ApiApprovalTests.SextantXamForms.netcoreapp3.1.approved.txt

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -28,21 +28,4 @@ namespace Sextant.XamForms
2828
{
2929
public static void InitializeForms(this Sextant.Sextant sextant) { }
3030
}
31-
public static class SextantHelper
32-
{
33-
[System.Obsolete("Use the Initialize method.")]
34-
public static Sextant.XamForms.NavigationView Initialise<TViewModel>(System.Reactive.Concurrency.IScheduler? mainThreadScheduler = null, System.Reactive.Concurrency.IScheduler? backgroundScheduler = null, ReactiveUI.IViewLocator? viewLocator = null)
35-
where TViewModel : class, Sextant.IViewModel { }
36-
[System.Obsolete("Use the dependency resolver mixins.")]
37-
public static Sextant.XamForms.NavigationView Initialize<TViewModel>(System.Reactive.Concurrency.IScheduler? mainThreadScheduler = null, System.Reactive.Concurrency.IScheduler? backgroundScheduler = null, ReactiveUI.IViewLocator? viewLocator = null)
38-
where TViewModel : class, Sextant.IViewModel { }
39-
[System.Obsolete("Use the dependency resolver mixins.")]
40-
public static void RegisterNavigation<TView, TViewModel>(System.Reactive.Concurrency.IScheduler? mainThreadScheduler = null, System.Reactive.Concurrency.IScheduler? backgroundScheduler = null, ReactiveUI.IViewLocator? viewLocator = null)
41-
where TView : ReactiveUI.IViewFor
42-
where TViewModel : class, Sextant.IViewModel { }
43-
[System.Obsolete("Use the dependency resolver mixins.")]
44-
public static void RegisterView<TView, TViewModel>(string? contract = null)
45-
where TView : ReactiveUI.IViewFor, new ()
46-
where TViewModel : class, Sextant.IViewModel { }
47-
}
4831
}

src/Sextant.XamForms/Mixins/DependencyResolverMixins.cs

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,13 @@ public static class DependencyResolverMixins
2929
/// <returns>The dependencyResolver.</returns>
3030
public static IMutableDependencyResolver RegisterNavigationView(this IMutableDependencyResolver dependencyResolver)
3131
{
32-
var vLocator = Locator.Current.GetService<IViewLocator>();
33-
34-
dependencyResolver.RegisterLazySingleton(() => new NavigationView(RxApp.MainThreadScheduler, RxApp.TaskpoolScheduler, vLocator), typeof(IView), NavigationView);
32+
dependencyResolver.RegisterLazySingleton(
33+
() => new NavigationView(
34+
RxApp.MainThreadScheduler,
35+
RxApp.TaskpoolScheduler,
36+
Locator.Current.GetService<IViewLocator>() ?? throw new InvalidOperationException("IViewLocator not registered.")),
37+
typeof(IView),
38+
NavigationView);
3539
return dependencyResolver;
3640
}
3741

@@ -44,9 +48,13 @@ public static IMutableDependencyResolver RegisterNavigationView(this IMutableDep
4448
/// <returns>The dependencyResolver.</returns>
4549
public static IMutableDependencyResolver RegisterNavigationView(this IMutableDependencyResolver dependencyResolver, IScheduler mainThreadScheduler, IScheduler backgroundScheduler)
4650
{
47-
var vLocator = Locator.Current.GetService<IViewLocator>();
48-
49-
dependencyResolver.RegisterLazySingleton(() => new NavigationView(mainThreadScheduler, backgroundScheduler, vLocator), typeof(IView), NavigationView);
51+
dependencyResolver.RegisterLazySingleton(
52+
() => new NavigationView(
53+
mainThreadScheduler,
54+
backgroundScheduler,
55+
Locator.Current.GetService<IViewLocator>() ?? throw new InvalidOperationException("IViewLocator not registered.")),
56+
typeof(IView),
57+
NavigationView);
5058
return dependencyResolver;
5159
}
5260

src/Sextant.XamForms/SextantHelper.cs

Lines changed: 0 additions & 99 deletions
This file was deleted.

src/Sextant/DefaultViewModelFactory.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
// The .NET Foundation licenses this file to you under the MIT license.
44
// See the LICENSE file in the project root for full license information.
55

6+
using System;
67
using Splat;
78

89
namespace Sextant
@@ -14,6 +15,15 @@ public class DefaultViewModelFactory : IViewModelFactory
1415
{
1516
/// <inheritdoc />
1617
public TViewModel Create<TViewModel>(string? contract = null)
17-
where TViewModel : IViewModel => Locator.Current.GetService<TViewModel>(contract);
18+
where TViewModel : IViewModel
19+
{
20+
var viewModel = Locator.Current.GetService<TViewModel>(contract);
21+
if (viewModel is null)
22+
{
23+
throw new InvalidOperationException($"ViewModel of type {typeof(TViewModel).Name} {contract} not registered.");
24+
}
25+
26+
return viewModel;
27+
}
1828
}
1929
}

src/Sextant/DependencyResolverMixins.cs

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,10 @@ public static IMutableDependencyResolver RegisterViewStackService(this IMutableD
3737
throw new ArgumentNullException(nameof(dependencyResolver));
3838
}
3939

40-
IView view = Locator.Current.GetService<IView>(NavigationView);
41-
IViewModelFactory viewModelFactory = Locator.Current.GetService<IViewModelFactory>();
42-
dependencyResolver.RegisterLazySingleton<IViewStackService>(() => new ParameterViewStackService(view, viewModelFactory));
40+
dependencyResolver.RegisterLazySingleton<IViewStackService>(
41+
() => new ParameterViewStackService(
42+
Locator.Current.GetService<IView>(NavigationView) ?? throw new InvalidOperationException("IView not registered."),
43+
Locator.Current.GetService<IViewModelFactory>() ?? new DefaultViewModelFactory()));
4344
return dependencyResolver;
4445
}
4546

@@ -55,9 +56,10 @@ public static IMutableDependencyResolver RegisterParameterViewStackService(this
5556
throw new ArgumentNullException(nameof(dependencyResolver));
5657
}
5758

58-
IView view = Locator.Current.GetService<IView>(NavigationView);
59-
IViewModelFactory viewModelFactory = Locator.Current.GetService<IViewModelFactory>();
60-
dependencyResolver.RegisterLazySingleton<IParameterViewStackService>(() => new ParameterViewStackService(view, viewModelFactory));
59+
dependencyResolver.RegisterLazySingleton<IParameterViewStackService>(
60+
() => new ParameterViewStackService(
61+
Locator.Current.GetService<IView>(NavigationView) ?? throw new InvalidOperationException("IView not registered."),
62+
Locator.Current.GetService<IViewModelFactory>() ?? new DefaultViewModelFactory()));
6163
return dependencyResolver;
6264
}
6365

@@ -82,8 +84,8 @@ public static IMutableDependencyResolver RegisterViewStackService<T>(this IMutab
8284
throw new ArgumentNullException(nameof(factory));
8385
}
8486

85-
IView view = Locator.Current.GetService<IView>(NavigationView);
86-
dependencyResolver.RegisterLazySingleton(() => factory(view));
87+
dependencyResolver.RegisterLazySingleton(() => factory(
88+
Locator.Current.GetService<IView>(NavigationView) ?? throw new InvalidOperationException("IView not registered.")));
8789
return dependencyResolver;
8890
}
8991

@@ -107,9 +109,9 @@ public static IMutableDependencyResolver RegisterViewStackService<T>(this IMutab
107109
throw new ArgumentNullException(nameof(factory));
108110
}
109111

110-
IView view = Locator.Current.GetService<IView>(NavigationView);
111-
IViewModelFactory viewModelFactory = Locator.Current.GetService<IViewModelFactory>();
112-
dependencyResolver.RegisterLazySingleton(() => factory(view, viewModelFactory));
112+
dependencyResolver.RegisterLazySingleton(() => factory(
113+
Locator.Current.GetService<IView>(NavigationView) ?? throw new InvalidOperationException("IView not registered."),
114+
Locator.Current.GetService<IViewModelFactory>() ?? new DefaultViewModelFactory()));
113115
return dependencyResolver;
114116
}
115117

@@ -147,7 +149,7 @@ public static IMutableDependencyResolver RegisterViewModelFactory(this IMutableD
147149
throw new ArgumentNullException(nameof(factory));
148150
}
149151

150-
dependencyResolver.RegisterLazySingleton(factory);
152+
dependencyResolver.RegisterLazySingleton(factory, typeof(IViewModelFactory));
151153
return dependencyResolver;
152154
}
153155

src/Sextant/Platforms/uap/Mixins/DependencyResolverMixins.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,11 @@ public static IMutableDependencyResolver RegisterViewUWP<TView, TViewModel>(this
116116
}
117117

118118
var uwpViewTypeResolver = Locator.Current.GetService<ViewTypeResolver>();
119+
if (uwpViewTypeResolver is null)
120+
{
121+
throw new InvalidOperationException("UWP view type resolver not registered.");
122+
}
123+
119124
uwpViewTypeResolver.Register<TView, TViewModel>();
120125
dependencyResolver.Register(() => new TView(), typeof(IViewFor<TViewModel>), contract);
121126
return dependencyResolver;
@@ -137,7 +142,7 @@ public static IMutableDependencyResolver RegisterViewUWP<TView, TViewModel>(this
137142
}
138143

139144
var uwpViewTypeResolver = dependencyResolver.GetService<ViewTypeResolver>(contract);
140-
return uwpViewTypeResolver.ResolveViewType<TViewModel>();
145+
return uwpViewTypeResolver?.ResolveViewType<TViewModel>();
141146
}
142147

143148
/// <summary>
@@ -162,7 +167,7 @@ public static IMutableDependencyResolver RegisterViewUWP<TView, TViewModel>(this
162167
}
163168

164169
var uwpViewTypeResolver = dependencyResolver.GetService<ViewTypeResolver>(contract);
165-
return uwpViewTypeResolver.ResolveViewType<TViewModel>();
170+
return uwpViewTypeResolver?.ResolveViewType<TViewModel>();
166171
}
167172
}
168173
}

0 commit comments

Comments
 (0)