Skip to content

Commit

Permalink
Removed preview depdencies (#23)
Browse files Browse the repository at this point in the history
Fixed bug navigating with parameters and injected depdendencies
  • Loading branch information
matt-goldman committed Nov 18, 2023
1 parent f0680c6 commit a7fe14d
Show file tree
Hide file tree
Showing 7 changed files with 55 additions and 31 deletions.
6 changes: 3 additions & 3 deletions src/DemoProject/DemoProject.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -50,15 +50,15 @@

<ItemGroup>
<!--<PackageReference Include="Goldie.MauiPlugins.PageResolver" Version="2.0.0" />-->
<PackageReference Include="Goldie.MauiPlugins.PageResolver" Version="2.0.0-preview1" />
<!--<PackageReference Include="Goldie.MauiPlugins.PageResolver" Version="2.0.0-preview1" />-->
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="8.0.0-rc.1.23419.4" />
</ItemGroup>

<!-- <ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Maui.Plugins.PageResolver.Attributes\Maui.Plugins.PageResolver.Attributes.csproj" />
<ProjectReference Include="..\Maui.Plugins.PageResolver.SourceGenerators\Maui.Plugins.PageResolver.SourceGenerators.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
<ProjectReference Include="..\Maui.Plugins.PageResolver\Maui.Plugins.PageResolver.csproj" />
</ItemGroup> -->
</ItemGroup>

<PropertyGroup>
<EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
Expand Down
29 changes: 18 additions & 11 deletions src/DemoProject/Pages/VmParamPage.xaml
Original file line number Diff line number Diff line change
@@ -1,17 +1,24 @@
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
<ContentPage x:Class="DemoProject.Pages.VmParamPage"
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="DemoProject.Pages.VmParamPage"
Title="VmParamPage">
<VerticalStackLayout>
<Label Text="Welcome to .NET MAUI!"
VerticalOptions="CenterAndExpand"
HorizontalOptions="CenterAndExpand" />
<Label Text="Your name is:"
VerticalOptions="CenterAndExpand"
HorizontalOptions="CenterAndExpand" />
<Label Text="{Binding NameParam}"
VerticalOptions="CenterAndExpand"
HorizontalOptions="CenterAndExpand" />
<Label HorizontalOptions="CenterAndExpand"
Text="Welcome to .NET MAUI!"
VerticalOptions="CenterAndExpand" />
<Label HorizontalOptions="CenterAndExpand"
Text="Your name is:"
VerticalOptions="CenterAndExpand" />
<Label HorizontalOptions="CenterAndExpand"
Text="{Binding NameParam}"
VerticalOptions="CenterAndExpand" />

<Label HorizontalOptions="CenterAndExpand"
Text="Name from sercice is:"
VerticalOptions="CenterAndExpand" />
<Label HorizontalOptions="CenterAndExpand"
Text="{Binding NameFromServiceParam}"
VerticalOptions="CenterAndExpand" />
</VerticalStackLayout>
</ContentPage>
4 changes: 1 addition & 3 deletions src/DemoProject/ViewModels/MainViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,7 @@ async Task GoToPageParamPage()

async Task GoToVmParamPage()
{
Name = _nameService.GetName();

await Navigation.PushAsync<VmParamPage>(Name);
await Navigation.PushAsync<VmParamPage>("Name passed as parameter");
}

async Task GoToMarkup()
Expand Down
5 changes: 4 additions & 1 deletion src/DemoProject/ViewModels/VmParamViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,11 @@ public class VmParamViewModel
{
public string NameParam { get; set; }

public VmParamViewModel(string name)
public string NameFromServiceParam { get; set; }

public VmParamViewModel(INameService nameService, string name)
{
NameParam = name;
NameFromServiceParam = nameService.GetName();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,10 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.11.0-beta1.23420.2">
<PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.4">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.8.0-2.final" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.7.0" />
</ItemGroup>
</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@
<Authors>Matt Goldman</Authors>
<Company></Company>
<RepositoryUrl>https://github.com/matt-goldman/Maui.Plugins.PageResolver</RepositoryUrl>
<Copyright>Matt Goldman 2022</Copyright>
<Copyright>Matt Goldman 2023</Copyright>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<PackageId>Goldie.MauiPlugins.PageResolver</PackageId>
<PackageLicenseExpression></PackageLicenseExpression>
<Description>A simple lightweight page resolver for dotnet MAUI projects. Uses the built in DI container to resolve dependencies and push a resolve page onto the navigation stack.</Description>
<Description>A simple lightweight page resolver for dotnet MAUI projects. Uses the built in DI container to resolve dependencies and push a resolved page onto the navigation stack.</Description>
<PackageIcon>gfg.png</PackageIcon>
<PackageIconUrl />
<PackageLicenseFile>LICENSE</PackageLicenseFile>
<Version>2.0.0-preview1</Version>
<Version>2.0.1</Version>
</PropertyGroup>

<ItemGroup>
Expand Down
32 changes: 24 additions & 8 deletions src/Maui.Plugins.PageResolver/NavigationExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -111,17 +111,22 @@ private static Page CreatePageWithViewModel<T>(IServiceProvider serviceProvider,

private static bool ParametersMatchConstructors(Type type, params object[] parameters)
{
var sp = Resolver.GetServiceProvider();

var constructors = type.GetConstructors();
foreach (var constructor in constructors)
{
var ctorParams = constructor.GetParameters();
if (ctorParams.Length == parameters.Length)

var nonInjectableParams = ctorParams.Where(p => !IsRegisteredDependency(sp, p.ParameterType)).ToArray();

if (nonInjectableParams.Length == parameters.Length)
{
for (int i = 0; i < ctorParams.Length; i++)
for (int i = 0; i < nonInjectableParams.Length; i++)
{
if (!ctorParams[i].ParameterType.IsAssignableFrom(parameters[i].GetType()))
if (!nonInjectableParams[i].ParameterType.IsAssignableFrom(parameters[i].GetType()))
break;
if (i == ctorParams.Length - 1)
if (i == nonInjectableParams.Length - 1)
return true; // all parameters match
}
}
Expand All @@ -131,17 +136,22 @@ private static bool ParametersMatchConstructors(Type type, params object[] param

private static bool ParametersMatchConstructorsExcludingType(Type type, Type excludeType, params object[] parameters)
{
var sp = Resolver.GetServiceProvider();

var constructors = type.GetConstructors();
foreach (var constructor in constructors)
{
var ctorParams = constructor.GetParameters().Where(p => p.ParameterType != excludeType).ToArray();
if (ctorParams.Length == parameters.Length)

var nonInjectableParams = ctorParams.Where(p => !IsRegisteredDependency(sp, p.ParameterType)).ToArray();

if (nonInjectableParams.Length == parameters.Length)
{
for (int i = 0; i < ctorParams.Length; i++)
for (int i = 0; i < nonInjectableParams.Length; i++)
{
if (!ctorParams[i].ParameterType.IsAssignableFrom(parameters[i].GetType()))
if (!nonInjectableParams[i].ParameterType.IsAssignableFrom(parameters[i].GetType()))
break;
if (i == ctorParams.Length - 1)
if (i == nonInjectableParams.Length - 1)
return true; // all parameters match
}
}
Expand All @@ -161,5 +171,11 @@ private static Page CreatePageUsingViewModel<T>(IServiceProvider serviceProvider
}
}

private static bool IsRegisteredDependency(IServiceProvider serviceProvider, Type type)
{
var serviceDescriptors = serviceProvider.GetServices(type);
return serviceDescriptors.Any();
}

#endregion
}

0 comments on commit a7fe14d

Please sign in to comment.