using System; using System.Collections.Immutable; using System.Threading.Tasks; namespace PCL.Core.App.IoC; public abstract class DependencyGroup { public abstract void InvokeInjection(Delegate injection); } public class DependencyGroup : DependencyGroup { public required ImmutableList Items { get; init; } public override void InvokeInjection(Delegate injection) { if (injection is Action> action) action(Items); else if (injection is Func, Task> awaitableAction) awaitableAction(Items).Wait(); else throw new InvalidCastException($"Injection point signature mismatch, must be: void/Task (ImmutableList<{typeof(TValue).Name}>)"); } } public class DependencyGroup : DependencyGroup { public required ImmutableList<(TValue value, TArguments args)> Items { get; init; } public override void InvokeInjection(Delegate injection) { if (injection is Action> action) action(Items); else if (injection is Func, Task> awaitableAction) awaitableAction(Items).Wait(); else throw new InvalidCastException($"Injection point signature mismatch, must be: void/Task (ImmutableList<({typeof(TValue).Name}, {typeof(TArguments).Name})>)"); } }