public IService FindClass(IServiceList list, Type @class) { IEnumerable <Type> keyParameters = GenericParametersProvider.ProvideGenericTypes(@class); return(list .GetServices() .Where(x => x.Registration.RegistrationFlags.Has(RegistrationFlagConstants.HasGenericParameters)) .Where(x => x.Registration.RegistrationFlags.SelectValueOrNull <IEnumerable <Type> >(RegistrationFlagConstants.GenericParameters).Count() == keyParameters.Count()) .Where(x => x.Registration.RegistrationFlags.SelectValueOrNull <IEnumerable <Type> >(RegistrationFlagConstants.GenericParameters).SequenceEqual(keyParameters)) .FirstOrDefault()); }
public IServiceGenericRegistration Generate(Type type) { ServiceGenericRegistrationBuilder builder = new ServiceGenericRegistrationBuilder(); return(builder .HasGenericParameters(TypeContainsGenericParametersChecker.Check(type)) .SetGenericParameters(ParametersProvider.ProvideGenericTypes(type)).Build()); }
public IInterface GenerateInterface(Type type) { IInterface @interface = new InterfaceBuilder() .AddType(type) .AddGenericParameters(GenericParametersProvider.ProvideGenericTypes(type)) .HasGenericArguments(TypeContainsGenericParametersChecker.Check(type)) .Build(); return(@interface); }
public bool Check(Type type) { if (ContainsGenericParametersChecker.Check(type)) { Type enumerable = GenericGenerator.Generate(typeof(IEnumerable <>), GenericParametersProvider.ProvideGenericTypes(type).FirstOrDefault()); return(enumerable.IsAssignableFrom(type)); } return(false); }
public bool Compare(Type t1, Type t2) { bool b = t1.FullName == t2.FullName; if (b) { return(ArgumentsComparer.Compare(GenericParametersProvider.ProvideGenericTypes(t1), GenericParametersProvider.ProvideGenericTypes(t2))); } return(false); }
public object GenerateEnumerable(Type enumerableType) { IEnumerable <Type> genericTypes = GenericParametersProvider.ProvideGenericTypes(enumerableType); Type enumerableOf = genericTypes .First(); Type list = GenericTypeGenerator.Generate(typeof(List <>), enumerableOf); return(Activator.CreateInstance(list)); }