public static IList <T> Initialize <T>(this IDIContext context, FilteredInitializerAttribute filter = null) where T : class, IContextInitializer { if (!typeof(T).IsInterface) { return(new List <T> { InitSingle <T>(context) }); } if (typeof(T) == typeof(ICustomContextInitializer)) { throw new MindiException(string.Format( "{0} can only be used for single-class context initializers !", typeof(ICustomContextInitializer) )); } if (initializers == null) { FetchInitializers(); } IList <T> result = new List <T>(); List <IContextInitializer> instances; if (!initializers.TryGetValue(typeof(T), out instances)) { return(result); } foreach (var instance in instances) { if (filter != null && IsInstanceFiltered(instance, filter)) { continue; } instance.Initialize(context); result.Add((T)instance); } return(result); }
private static bool IsInstanceFiltered(IContextInitializer instance, FilteredInitializerAttribute filter) { var attributes = instance.GetType().GetCustomAttributes(filter.GetType(), true); return(attributes.Cast <FilteredInitializerAttribute>().All(atr => atr.name != filter.name)); }