.NET MAUIとCleanArchitectureで簡単なアプリを作成してみる4～実装6～

[.NET MAUIとCleanArchitectureで簡単なアプリを作成してみる4～実装5～](https://qiita.com/GOROGOROMOGUMOGU/items/27d9390bea2c6f37b678)の続き
# サービスを登録する
#### ServiceCollectionを保持するクラスを作成する
MauiApp1プロジェクト直下にServiceProvider.csを追加する
```c#:ServiceProvider.cs
    internal static class ServiceProvider
    {
#pragma warning disable CS8618
        private static IServiceProvider _provider;
#pragma warning restore CS8618

        /// <summary>
        /// サービスコレクション
        /// </summary>
        public static IServiceCollection Services { get; } = new ServiceCollection();

        /// <summary>
        /// サービスプロバイダーをビルドする
        /// </summary>
        public static void Build()
        {
            _provider = Services.BuildServiceProvider();
        }

        /// <summary>
        /// サービスを取得する
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public static T GetService<T>()
        {
            return _provider.GetService<T>();
        }
    }
```
#### サービスを登録する
```diff_c:MauiProgram.cs
    public static class MauiProgram
    {
        public static MauiApp CreateMauiApp()
        {
+           // サービスを登録する
+           SetupServices();
+           ServiceProvider.Build();

            var builder = MauiApp.CreateBuilder();
            builder
                .UseMauiApp<App>()
+               .UseSkiaSharp(true)
                .ConfigureFonts(fonts =>
                {
                    fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
                    fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
                });

#if DEBUG
    		builder.Logging.AddDebug();
#endif

            return builder.Build();
        }

+        /// <summary>
+        /// サービス登録
+        /// </summary>
+        private static void SetupServices()
+        {
+            // Repository
+            ServiceProvider.Services.AddTransient<IHealthRepository, HealthRepository>();
+
+            // ユースケース
+            ServiceProvider.Services.AddSingleton<IHealthCreateUseCase, HealthCreateInteractor>();
+            ServiceProvider.Services.AddSingleton<IHealthGetListUseCase, HealthGetListInteractor>();
+
+            // データベース作成
+            Sqlite.CreateDB(Path.Combine(FileSystem.AppDataDirectory, "mauiapp1.db"));
+        }
    }
```
以下は、LiveCharts2 SkiaSharpの登録です。
```diff_c:MauiProgram.cs
+               .UseSkiaSharp(true)
```
# 動作させる
以上で、全て繋がったので早速動かしてみます。
## Windowsアプリ
「Windows Machine」を選択して▶を押下する
![Windows実行.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674221/23b19f53-b1bb-4d11-d576-bbb02e04d1c1.png)

メイン画面を表示したところ
![Windowsアプリ-メイン画面.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674221/8a19c220-8b4d-c944-cc29-0868993bf72a.png)

開始日を押下したところ
![Windowsアプリ-メイン画面-開始日.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674221/5502bf1d-52f0-8563-7625-5fb0646ce897.png)

編集画面を表示したところ
![Windowsアプリ-編集画面.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674221/c0ad61cc-1a2c-19b4-b105-78bbba9e6c0c.png)

## Androidアプリ
Android実機をPCに接続する
「Androidローカルデバイス」を選択して▶を押下する
![Android実行.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674221/3dd7b5c1-d7ca-5f47-f588-1b34127747a4.png)

メイン画面を表示したところ
![Androidアプリ-メイン画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674221/87b103b6-f168-8427-7873-f3c89797f013.png)

開始日を押下したところ
![Androidアプリ-メイン画面-開始日.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674221/34bead12-a193-12f0-fa8e-ca9a177cae9b.png)

編集画面を表示したところ
![Androidアプリ-編集画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674221/05e8d519-5328-f147-e419-28b28e95194f.png)

# 参考にしたURL
[.NET MAUI チュートリアル](https://learn.microsoft.com/ja-jp/dotnet/maui/tutorials/notes-app/?view=net-maui-8.0)
# まとめ
今回で完成です。