/// <summary> /// Appends the specified predict. /// </summary> /// <param name="predict">The predict.</param> public void Append(ParameterlessFunctionInjection <T> predict) { if (predict != null) { _injectionChain.Add(predict); } }
/// <summary> /// Prepends the specified predict. /// </summary> /// <param name="predict">The predict.</param> public void Prepend(ParameterlessFunctionInjection <T> predict) { if (predict != null) { _injectionChain.Insert(0, predict); } }
/// <summary> /// Initializes the default function injection. /// </summary> private static void InitializeDefaultFunctionInjection() { ParameterlessFunctionInjection <CultureInfo> injection = delegate() { return(_resourceHub?.DefaultCultureInfo); }; GetCurrentCultureInfo = new ParameterlessPrioritizedFunctionInjection <CultureInfo>(injection); }
/// <summary> /// Applies the injection. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="staticType">Type of the static.</param> /// <param name="propertyName">Name of the property.</param> /// <param name="injectionCandidate">The injection candidate.</param> /// <param name="expectAsLowPriority">if set to <c>true</c> [expect as low priority].</param> public static void ApplyInjection <T>(Type staticType, string propertyName, ParameterlessFunctionInjection <T> injectionCandidate, bool expectAsLowPriority = false) { if (staticType != null && !string.IsNullOrWhiteSpace(propertyName) && injectionCandidate != null) { var hitProperty = staticType.GetProperties(BindingFlags.Static | BindingFlags.Public | BindingFlags.GetProperty).FirstOrDefault(x => x.Name == propertyName); if (hitProperty != null) { if (typeof(ParameterlessPrioritizedFunctionInjection <T>).IsAssignableFrom(hitProperty.PropertyType)) { ParameterlessPrioritizedFunctionInjection <T> existed = hitProperty.GetValue(null) as ParameterlessPrioritizedFunctionInjection <T>; if (existed == null) { if (hitProperty.SetMethod != null) { existed = new ParameterlessPrioritizedFunctionInjection <T>(); hitProperty.SetValue(null, existed); } else { throw ExceptionFactory.CreateInvalidObjectException(hitProperty?.Name, new { type = staticType?.FullName, property = hitProperty?.Name }); } } if (expectAsLowPriority) { existed.Append(injectionCandidate); } else { existed.Prepend(injectionCandidate); } } else if (hitProperty.PropertyType == typeof(ParameterlessFunctionInjection <>).MakeGenericType(typeof(T))) { hitProperty.SetValue(null, injectionCandidate); } } } }
/// <summary> /// Initializes a new instance of the <see cref="ParameterlessPrioritizedFunctionInjection{T}" /> class. /// </summary> /// <param name="defaultInjection">The default injection.</param> /// <param name="isStatic">if set to <c>true</c> [is static].</param> public ParameterlessPrioritizedFunctionInjection(ParameterlessFunctionInjection <T> defaultInjection, bool isStatic = false) { _injectionChain.AddIfNotNull(defaultInjection); _isStatic = isStatic; }