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;
}
}
}