Dependency Injection macht das Leben einfacher auch in .NET MAUI. Hin und wieder ist es notwendig ein Service zu referenzieren das nicht über den Konstruktor kommt. Hier kommt ein Code Schnipsel für einen Service Provider:
public static class ServiceProvider
{
public static TService GetService<TService>()
=> Current.GetService<TService>();
public static IServiceProvider Current
=>
#if WINDOWS10_0_17763_0_OR_GREATER
MauiWinUIApplication.Current.Services;
#elif ANDROID
MauiApplication.Current.Services;
#elif IOS || MACCATALYST
MauiUIApplicationDelegate.Current.Services;
#else
null;
#endif
}
Erläuterung:
Methode GetService():
Diese Methode ist eine Abkürzung, um einen Dienst vom Typ TService zu erhalten.
Sie delegiert den Aufruf an die Methode GetService() des aktuellen IServiceProviders.
Eigenschaft Current: Diese Eigenschaft gibt den aktuellen IServiceProvider auf der Basis der Plattform zurück.
Sie verwendet Präprozessor-Direktiven (#if, #elif, #else, #endif) zur bedingten Kompilierung unterschiedlichen Codes auf der Grundlage der Plattform.
Die plattformspezifische Eigenschaft Current wird auf der Grundlage der Kompilierungskonstanten ausgewählt:
Für Windows (UWP) mit Version 17763.0 oder höher wird MauiWinUIApplication.Current.Services verwendet.
Für Android wird MauiApplication.Current.Services verwendet.
Für iOS und Mac Catalyst verwendet es MauiUIApplicationDelegate.Current.Services.
Für andere Plattformen wird die Eigenschaft als Fallback auf null gesetzt.
Diese ServiceProvider-Klasse eine einfache und konsistente Möglichkeit bietet, Dienste in einer plattformübergreifenden MAUI-Anwendung abzurufen, wobei plattformspezifische Details, der Einfachheit halber, weggelassen werden. Das Code Schnipsel Service Provider verwendet die bedingte Kompilierung, um die Unterschiede bei der Abfrage von Diensten auf der Grundlage des zugrunde liegenden Betriebssystems zu behandeln.
Schreibe einen Kommentar