private static bool IsSubTypeOf(List <TypeDefinition> types, TypeIdentity parent, TypeIdentity child) { var childDef = types.Find(t => t.Identity.Equals(child)); var directParent = childDef.BaseType; while (directParent != null) { if (parent.Equals(directParent)) { return(true); } var directParentDef = types.Find(t => t.Identity.Equals(directParent)); directParent = directParentDef.BaseType; } foreach (var baseInterface in childDef.BaseInterfaces) { if (parent.Equals(baseInterface)) { return(true); } } return(false); }
private bool AvailableTypeMatchesRequiredType(TypeIdentity requiredType, TypeIdentity availableType) { return((availableType != null) && (requiredType.Equals(availableType) || m_Repository.IsSubTypeOf(requiredType, availableType))); }
public static bool OpenGenericIsAssignableFrom( TypeIdentity openGeneric, TypeDefinition type, Func<TypeIdentity, TypeDefinition> toDefinition) { // Terminate recursion if ((type == null) || openGeneric.Equals(type)) { return false; } // typeToCheck is a closure of openGenericType var isClosureOfGenericType = type.Identity.IsGenericType && openGeneric.Equals(type.GenericTypeDefinition); // typeToCheck is the subclass of a closure of openGenericType var isSubClassOfClosure = OpenGenericIsAssignableFrom(openGeneric, toDefinition(type.BaseType), toDefinition); // typeToCheck inherits from an interface which is the closure of openGenericType var inheritsClosureInterface = type.BaseInterfaces.Any( interfaceType => OpenGenericIsAssignableFrom(openGeneric, toDefinition(interfaceType), toDefinition)); return isClosureOfGenericType || isSubClassOfClosure || inheritsClosureInterface; }
private bool AvailableTypeMatchesRequiredType(TypeIdentity requiredType, TypeIdentity availableType) { return (availableType != null) && (requiredType.Equals(availableType) || m_Repository.IsSubTypeOf(requiredType, availableType)); }
private static bool IsSubTypeOf(List<TypeDefinition> types, TypeIdentity parent, TypeIdentity child) { var childDef = types.Find(t => t.Identity.Equals(child)); var directParent = childDef.BaseType; while (directParent != null) { if (parent.Equals(directParent)) { return true; } var directParentDef = types.Find(t => t.Identity.Equals(directParent)); directParent = directParentDef.BaseType; } foreach (var baseInterface in childDef.BaseInterfaces) { if (parent.Equals(baseInterface)) { return true; } } return false; }