Skip to content
This repository was archived by the owner on Apr 23, 2023. It is now read-only.

Commit 408ac55

Browse files
move DI Configuration to ApplicationServices
1 parent d954bcb commit 408ac55

File tree

8 files changed

+53
-24
lines changed

8 files changed

+53
-24
lines changed

Xamarin/BooksAppX/BooksAppX/BooksAppX.Android/BooksAppX.Android.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@
5353
<PackageReference Include="Microsoft.Extensions.Logging">
5454
<Version>2.0.0</Version>
5555
</PackageReference>
56+
<PackageReference Include="System.Runtime.CompilerServices.Unsafe">
57+
<Version>4.3.0</Version>
58+
</PackageReference>
5659
<PackageReference Include="Xamarin.Forms" Version="2.5.0.122203" />
5760
<PackageReference Include="Xamarin.Android.Support.Design" Version="25.4.0.2" />
5861
<PackageReference Include="Xamarin.Android.Support.v7.AppCompat" Version="25.4.0.2" />

Xamarin/BooksAppX/BooksAppX/BooksAppX/App.xaml.cs

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,14 @@ public partial class App : Application
1515
public App()
1616
{
1717
InitializeComponent();
18-
RegisterServices();
1918

2019
MainPage = new BooksAppX.Views.MainPage();
2120
}
2221

2322
protected override void OnStart()
2423
{
2524
// Handle when your app starts
26-
AppServices.GetService<INavigationService>().UseNavigation = true; // always use navigation
25+
ApplicationServices.Instance.ServiceProvider.GetService<INavigationService>().UseNavigation = true; // always use navigation
2726
}
2827

2928
protected override void OnSleep()
@@ -35,22 +34,5 @@ protected override void OnResume()
3534
{
3635
// Handle when your app resumes
3736
}
38-
39-
private void RegisterServices()
40-
{
41-
var services = new ServiceCollection();
42-
services.AddSingleton<IBooksRepository, BooksSampleRepository>();
43-
services.AddSingleton<IItemsService<Book>, BooksService>();
44-
services.AddTransient<BooksViewModel>();
45-
services.AddTransient<BookDetailViewModel>();
46-
services.AddTransient<AboutViewModel>();
47-
services.AddSingleton<IMessageService, XamarinMessageService>();
48-
services.AddSingleton<INavigationService, XamarinNavigationService>();
49-
services.AddSingleton<XamarinInitializeNavigationService>();
50-
services.AddLogging();
51-
AppServices = services.BuildServiceProvider();
52-
}
53-
54-
public IServiceProvider AppServices { get; private set; }
5537
}
5638
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
using BooksAppX.Services;
2+
using BooksAppX.ViewModels;
3+
using BooksLib.Models;
4+
using BooksLib.Services;
5+
using BooksLib.ViewModels;
6+
using Framework.Services;
7+
using Microsoft.Extensions.DependencyInjection;
8+
using System;
9+
10+
namespace BooksAppX
11+
{
12+
public class ApplicationServices
13+
{
14+
private ApplicationServices()
15+
{
16+
var services = new ServiceCollection();
17+
services.AddSingleton<IBooksRepository, BooksSampleRepository>();
18+
services.AddSingleton<IItemsService<Book>, BooksService>();
19+
services.AddTransient<BooksViewModel>();
20+
services.AddTransient<BookDetailViewModel>();
21+
services.AddTransient<AboutViewModel>();
22+
services.AddSingleton<IMessageService, XamarinMessageService>();
23+
services.AddSingleton<INavigationService, XamarinNavigationService>();
24+
services.AddSingleton<XamarinInitializeNavigationService>();
25+
services.AddLogging();
26+
ServiceProvider = services.BuildServiceProvider();
27+
}
28+
29+
private static ApplicationServices _instance;
30+
private static object _instanceLock = new object();
31+
private static ApplicationServices GetInstance()
32+
{
33+
lock (_instanceLock)
34+
{
35+
return _instance ?? (_instance = new ApplicationServices());
36+
}
37+
}
38+
public static ApplicationServices Instance => _instance ?? GetInstance();
39+
40+
public IServiceProvider ServiceProvider { get; }
41+
}
42+
43+
}

Xamarin/BooksAppX/BooksAppX/BooksAppX/BooksAppX.projitems

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
<Compile Include="$(MSBuildThisFileDirectory)App.xaml.cs">
1616
<DependentUpon>App.xaml</DependentUpon>
1717
</Compile>
18+
<Compile Include="$(MSBuildThisFileDirectory)ApplicationServices.cs" />
1819
<Compile Include="$(MSBuildThisFileDirectory)Services\XamarinInitializeNavigationService.cs" />
1920
<Compile Include="$(MSBuildThisFileDirectory)Services\XamarinMessageService.cs" />
2021
<Compile Include="$(MSBuildThisFileDirectory)Services\XamarinNavigationService.cs" />

Xamarin/BooksAppX/BooksAppX/BooksAppX/Views/AboutPage.xaml.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public partial class AboutPage : ContentPage
1111
public AboutPage()
1212
{
1313
InitializeComponent();
14-
ViewModel = (Application.Current as App).AppServices.GetService<AboutViewModel>();
14+
ViewModel = ApplicationServices.Instance.ServiceProvider.GetService<AboutViewModel>();
1515
BindingContext = this;
1616
}
1717

Xamarin/BooksAppX/BooksAppX/BooksAppX/Views/BookDetailPage.xaml.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@ public BookDetailPage ()
1414
BindingContext = this;
1515
}
1616

17-
public BookDetailViewModel ViewModel { get; } = (Application.Current as App).AppServices.GetService<BookDetailViewModel>();
17+
public BookDetailViewModel ViewModel { get; } = ApplicationServices.Instance.ServiceProvider.GetService<BookDetailViewModel>();
1818
}
1919
}

Xamarin/BooksAppX/BooksAppX/BooksAppX/Views/BooksPage.xaml.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public BooksPage()
1414
BindingContext = this;
1515
}
1616

17-
public BooksViewModel ViewModel { get; } = (Application.Current as App).AppServices.GetService<BooksViewModel>();
17+
public BooksViewModel ViewModel { get; } = ApplicationServices.Instance.ServiceProvider.GetService<BooksViewModel>();
1818

1919
//async void OnItemSelected(object sender, SelectedItemChangedEventArgs args)
2020
//{

Xamarin/BooksAppX/BooksAppX/BooksAppX/Views/MainPage.xaml.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public MainPage ()
1616
{
1717
InitializeComponent();
1818

19-
(Application.Current as App).AppServices.GetService<XamarinInitializeNavigationService>().SetNavigation(navigationPage.Navigation, PageNames.BooksPage);
19+
ApplicationServices.Instance.ServiceProvider.GetService<XamarinInitializeNavigationService>().SetNavigation(navigationPage.Navigation, PageNames.BooksPage);
2020
}
2121

2222
protected override bool OnBackButtonPressed()
@@ -27,7 +27,7 @@ protected override bool OnBackButtonPressed()
2727

2828
private async void OnBackButtonAsync()
2929
{
30-
await (Application.Current as App).AppServices.GetService<INavigationService>().GoBackAsync();
30+
await ApplicationServices.Instance.ServiceProvider.GetService<INavigationService>().GoBackAsync();
3131
}
3232
}
3333
}

0 commit comments

Comments
 (0)