| File: LifecycleEvents\LifecycleEventServiceExtensions.cs | Web Access |
| Project: src\src\Core\src\Core.csproj (Microsoft.Maui) |
#nullable enable using System; using System.Collections.Generic; using Microsoft.Extensions.DependencyInjection; namespace Microsoft.Maui.LifecycleEvents { public static class LifecycleEventServiceExtensions { public static void InvokeEvents(this ILifecycleEventService lifecycleService, string eventName) => lifecycleService.InvokeEvents<Action>(eventName, action => action?.Invoke()); public static void InvokeEvents<TDelegate>(this ILifecycleEventService lifecycleService, string eventName, Action<TDelegate> action) where TDelegate : Delegate { var delegates = lifecycleService.GetEventDelegates<TDelegate>(eventName); foreach (var del in delegates) action?.Invoke(del); } internal static void InvokeLifecycleEvents<TDelegate>(this IServiceProvider services, Action<TDelegate> action) where TDelegate : Delegate { if (services == null) return; var delegates = services.GetLifecycleEventDelegates<TDelegate>(); foreach (var del in delegates) action?.Invoke(del); } internal static IEnumerable<TDelegate> GetLifecycleEventDelegates<TDelegate>(this IServiceProvider services, string? eventName = null) where TDelegate : Delegate { var lifecycleService = services?.GetService<ILifecycleEventService>(); if (lifecycleService == null) yield break; if (eventName == null) eventName = typeof(TDelegate).Name; foreach (var del in lifecycleService.GetEventDelegates<TDelegate>(eventName)) yield return del; } internal static bool ContainsLifecycleEvent<TDelegate>(this IServiceProvider services, string? eventName = null) where TDelegate : Delegate { var lifecycleService = services?.GetService<ILifecycleEventService>(); if (lifecycleService == null) return false; if (eventName == null) eventName = typeof(TDelegate).Name; if (lifecycleService.ContainsEvent(eventName)) return true; return false; } } }