Stashbox by Peter Csajtai

<PackageReference Include="Stashbox" Version="3.2.0" />

 ResolverExtensions

static class ResolverExtensions
using Stashbox.Utils.Data.Immutable; using System.Collections.Generic; using System.Linq.Expressions; namespace Stashbox.Resolution.Extensions { internal static class ResolverExtensions { public static bool CanResolve(this ImmutableBucket<IResolver> resolvers, TypeInformation typeInfo, ResolutionContext resolutionContext) { int length = resolvers.Length; for (int i = 0; i < length; i++) { if (resolvers[i].CanUseForResolution(typeInfo, resolutionContext)) return true; } return false; } public static Expression BuildResolutionExpression(this ImmutableBucket<IResolver> resolvers, TypeInformation typeInfo, ResolutionContext resolutionContext, IResolutionStrategy resolutionStrategy) { int length = resolvers.Length; for (int i = 0; i < length; i++) { IResolver resolver = resolvers[i]; if (resolver.CanUseForResolution(typeInfo, resolutionContext)) return resolver.GetExpression(resolutionStrategy, typeInfo, resolutionContext); } return null; } public static IEnumerable<Expression> BuildAllResolutionExpressions(this ImmutableBucket<IResolver> resolvers, TypeInformation typeInfo, ResolutionContext resolutionContext, IResolutionStrategy resolutionStrategy) { int length = resolvers.Length; for (int i = 0; i < length; i++) { IResolver resolver = resolvers[i]; IEnumerableSupportedResolver enumerableSupportedResolver = resolver as IEnumerableSupportedResolver; if (enumerableSupportedResolver != null && resolver.CanUseForResolution(typeInfo, resolutionContext)) return enumerableSupportedResolver.GetExpressionsForEnumerableRequest(resolutionStrategy, typeInfo, resolutionContext); } return null; } } }