Stashbox by Peter Csajtai

<PackageReference Include="Stashbox" Version="3.5.1-preview-622" />

 InjectionParameterExtensions

using Stashbox.Utils; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; namespace Stashbox.Resolution.Extensions { internal static class InjectionParameterExtensions { public static Expression SelectInjectionParameterOrDefault(this IEnumerable<KeyValuePair<string, object>> injectionParameters, TypeInformation typeInformation) { string memberName = typeInformation.ParameterOrMemberName; KeyValuePair<string, object> keyValuePair = injectionParameters.FirstOrDefault((KeyValuePair<string, object> param) => param.Key == memberName); if (keyValuePair.Equals(default(KeyValuePair<string, object>))) return null; if (keyValuePair.Value == null) { if (!(typeInformation.Type == Constants.ObjectType)) return keyValuePair.Value.AsConstant().ConvertTo(typeInformation.Type); return keyValuePair.Value.AsConstant(); } if (!(keyValuePair.Value.GetType() == typeInformation.Type)) return keyValuePair.Value.AsConstant().ConvertTo(typeInformation.Type); return keyValuePair.Value.AsConstant(); } } }