using System; using System.Collections.Generic; using ModestTree; using Zenject.Internal; namespace Zenject { public static class IProviderExtensions { static readonly List EmptyArgList = new List(); public static void GetAllInstancesWithInjectSplit( this IProvider creator, InjectContext context, out Action injectAction, List buffer) { creator.GetAllInstancesWithInjectSplit( context, EmptyArgList, out injectAction, buffer); } public static void GetAllInstances( this IProvider creator, InjectContext context, List buffer) { creator.GetAllInstances(context, EmptyArgList, buffer); } public static void GetAllInstances( this IProvider creator, InjectContext context, List args, List buffer) { Assert.IsNotNull(context); Action injectAction; creator.GetAllInstancesWithInjectSplit(context, args, out injectAction, buffer); if (injectAction != null) { injectAction.Invoke(); } } public static object TryGetInstance( this IProvider creator, InjectContext context) { return creator.TryGetInstance(context, EmptyArgList); } public static object TryGetInstance( this IProvider creator, InjectContext context, List args) { var allInstances = ZenPools.SpawnList(); try { creator.GetAllInstances(context, args, allInstances); if (allInstances.Count == 0) { return null; } Assert.That(allInstances.Count == 1, "Provider returned multiple instances when one or zero was expected"); return allInstances[0]; } finally { ZenPools.DespawnList(allInstances); } } public static object GetInstance( this IProvider creator, InjectContext context) { return creator.GetInstance(context, EmptyArgList); } public static object GetInstance( this IProvider creator, InjectContext context, List args) { var allInstances = ZenPools.SpawnList(); try { creator.GetAllInstances(context, args, allInstances); Assert.That(allInstances.Count > 0, "Provider returned zero instances when one was expected when looking up type '{0}'", context.MemberType); Assert.That(allInstances.Count == 1, "Provider returned multiple instances when only one was expected when looking up type '{0}'", context.MemberType); return allInstances[0]; } finally { ZenPools.DespawnList(allInstances); } } } }