LoginSignup
1
1

More than 1 year has passed since last update.

.NET MAUIでの依存性注入とプラットフォーム固有コードの管理

Last updated at Posted at 2023-04-22

.NET MAUIでは、アプリケーションのコードを綺麗に保ちながら、プラットフォーム固有の実装を効果的に管理できます。この記事では、依存性注入を使ってプラットフォーム固有の実装を管理する方法と、コンパイラディレクティブを使ったアプローチの違いについて説明します。

依存性注入とは

依存性注入(Dependency Injection)は、オブジェクト間の依存関係を管理するデザインパターンです。これにより、コードの可読性と保守性が向上し、アプリケーションの構造が改善されます。

.NET MAUIでの依存性注入

例として、プラットフォームごとに異なるデバイス名を取得するアプリケーションを考えます。

  1. 共通インターフェイスの作成: プラットフォーム固有の機能にアクセスするための共通インターフェイスを定義します。

    public interface IDeviceNameService
    {
        string GetDeviceName();
    }
    
  2. プラットフォーム固有の実装: Platformsディレクトリ内の各プラットフォームで、先ほど定義したインターフェイスの実装を提供します。

    Androidの実装
    public class AndroidDeviceNameService : IDeviceNameService
    {
        public string GetDeviceName()
        {
            return "Android Device";
        }
    }
    
    iOSの実装
    public class IOSDeviceNameService : IDeviceNameService
    {
        public string GetDeviceName()
        {
            return "iOS Device";
        }
    }
    
  3. 依存関係の登録と解決: アプリケーションの初期化時に、依存関係を登録し、アプリケーションの他の部分で、依存関係を解決して使用します。

Startup.cs
public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<IDeviceNameService, AndroidDeviceNameService>();
}

アプリケーションの他の部分で、依存関係を解決して使用します。

public class MainPageViewModel
{
    private readonly IDeviceNameService _deviceNameService;

    public MainPageViewModel(IDeviceNameService deviceNameService)
    {
        _deviceNameService = deviceNameService;
    }

    public string GetDeviceName()
    {
        return _deviceNameService.GetDeviceName();
    }
}

.NET MAUIのディレクトリ構成

.NET MAUIでは、プラットフォーム固有の実装をPlatformsフォルダ内に配置します。以下は、一般的なディレクトリ構成の例です。

MyApp
│   Startup.cs
│   MainPage.xaml
│   MainPage.xaml.cs
│
└───Platforms
    ├───Android
    │       AndroidDeviceNameService.cs
    │
    └───iOS
            IOSDeviceNameService.cs

この構成では、Platformsフォルダにそれぞれのプラットフォーム(AndroidやiOSなど)ごとにサブフォルダがあります。これにより、プラットフォーム固有の実装が整理され、アプリケーションの保守性が向上します。

コンパイラディレクティブとの違い

コンパイラディレクティブ(#IF ANDROIDなど)は、コードが特定のプラットフォームやコンパイ
ール条件に基づいてコンパイルされるかどうかを制御するために使用されます。しかし、これらのディレクティブは、コードが難解になり、保守が難しくなることがあります。

例えば、コンパイラディレクティブを使ってデバイス名を取得するコードは以下のようになります。

public string GetDeviceName()
{
#if ANDROID
    return "Android Device";
#elif IOS
    return "iOS Device";
#else
    return "Unknown Device";
#endif
}

この方法では、プラットフォーム固有のコードが一つの場所に混在しており、これが複雑になるとコードの可読性が低下します。依存性注入を使用することで、プラットフォーム固有の実装を分離し、コードの構造と保守性を向上させることができます。

まとめ

.NET MAUIでは、依存性注入を使用してプラットフォーム固有の実装を効果的に管理することができます。これにより、アプリケーションのコードが綺麗に保たれ、保守性が向上します。一方、コンパイラディレクティブを使ったアプローチは、コードの可読性が低下し、保守が難しくなることがあります。依存性注入を使ったアプローチを選択することで、アプリケーションの品質を向上させることができます。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1