using System; using System.Collections.Generic; using System.Runtime.CompilerServices; namespace VContainer { public static class IObjectResolverExtensions { [MethodImpl(MethodImplOptions.AggressiveInlining)] public static T Resolve(this IObjectResolver resolver) => (T)resolver.Resolve(typeof(T)); [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool TryResolve(this IObjectResolver resolver, out T resolved) { if (resolver.TryResolve(typeof(T), out var r)) { resolved = (T)r; return true; } resolved = default; return false; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static T ResolveOrDefault(this IObjectResolver resolver, T defaultValue = default) { if (resolver.TryResolve(typeof(T), out var value)) { return (T)value; } return defaultValue; } // Using from CodeGen [Preserve] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static object ResolveNonGeneric(this IObjectResolver resolve, Type type) => resolve.Resolve(type); public static object ResolveOrParameter( this IObjectResolver resolver, Type parameterType, string parameterName, IReadOnlyList parameters) { if (parameters != null) { // ReSharper disable once ForCanBeConvertedToForeach for (var i = 0; i < parameters.Count; i++) { var parameter = parameters[i]; if (parameter.Match(parameterType, parameterName)) { return parameter.GetValue(resolver); } } } return resolver.Resolve(parameterType); } } }