[C#][MAUI]Appへ依存性注入 / Dependency injection into App

C#

.NET MAUIでAppへ依存性注入できることがわかった。

以下のようにダミークラスとインターフェースを用意して、Appへ依存性注入できるかを確認してみた。

実行してみると、App()は正常終了した。

また、IServiceProvderは何もしなくても注入できた。

C#
// .NET8

//
// Dummy class and interface
//
public interface IGetter
{
    string GetName();
}

public class Getter : IGetter
{
    public string GetName() => "Success";
}

//
// MauiProgram.cs
//
public static class MauiProgram
{
    public static MauiApp CreateMauiApp()
    {
        var builder = MauiApp.CreateBuilder();
        builder
            .UseMauiApp<App>()
            .ConfigureFonts(fonts =>
            {
                fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
                fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
            });

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

        // Registers dummy dependency
        builder.Services.AddSingleton<IGetter, Getter>();

        return builder.Build();
    }
}

//
// App.xaml.cs
//
public partial class App
{
    public App(IServiceProvider serviceProvider, IGetter getter)
    {
        InitializeComponent();

        Debug.Assert(getter.GetName() == "Success");
        var getter2 = serviceProvider.GetService<IGetter>();
        Debug.Assert(ReferenceEquals(getter, getter2));

        MainPage = new AppShell();
    }
}

コメント

タイトルとURLをコピーしました