public bool TryCloseGenericPart(Type[] typeArguments, out DiscoveredPart closed) { for (int index = 0; index < _partType.GenericTypeParameters.Length; index++) { foreach (var genericParameterConstraints in _partType.GenericTypeParameters[index].GetTypeInfo().GetGenericParameterConstraints()) { if (!genericParameterConstraints.GetTypeInfo().IsAssignableFrom(typeArguments[index].GetTypeInfo())) { closed = null; return(false); } } } if (_appliedArguments.Any(args => Enumerable.SequenceEqual(args, typeArguments))) { closed = null; return(false); } _appliedArguments.Add(typeArguments); var closedType = _partType.MakeGenericType(typeArguments).GetTypeInfo(); var result = new DiscoveredPart(closedType, _attributeContext, _activationFeatures, _partMetadata); foreach (var export in _exports) { var closedExport = export.CloseGenericExport(closedType, typeArguments); result.AddDiscoveredExport(closedExport); } closed = result; return(true); }
public bool InspectTypeForPart(TypeInfo type, out DiscoveredPart part) { part = null; if (type.IsAbstract || !type.IsClass || _attributeContext.GetDeclaredAttribute<PartNotDiscoverableAttribute>(type.AsType(), type) != null) return false; foreach (var export in DiscoverExports(type)) { part = part ?? new DiscoveredPart(type, _attributeContext, _activationFeatures); part.AddDiscoveredExport(export); } return part != null; }
public bool InspectTypeForPart(TypeInfo type, out DiscoveredPart part) { part = null; if (type.IsAbstract || !type.IsClass || _attributeContext.GetDeclaredAttribute <PartNotDiscoverableAttribute>(type.AsType(), type) != null) { return(false); } foreach (var export in DiscoverExports(type)) { part = part ?? new DiscoveredPart(type, _attributeContext, _activationFeatures); part.AddDiscoveredExport(export); } return(part != null); }
public bool TryCloseGenericPart(Type[] typeArguments, out DiscoveredPart closed) { if (_appliedArguments.Any(args => Enumerable.SequenceEqual(args, typeArguments))) { closed = null; return(false); } _appliedArguments.Add(typeArguments); var closedType = _partType.MakeGenericType(typeArguments).GetTypeInfo(); var result = new DiscoveredPart(closedType, _attributeContext, _activationFeatures, _partMetadata); foreach (var export in _exports) { var closedExport = export.CloseGenericExport(closedType, typeArguments); result.AddDiscoveredExport(closedExport); } closed = result; return(true); }
public bool TryCloseGenericPart(Type[] typeArguments, out DiscoveredPart closed) { if (_appliedArguments.Any(args => Enumerable.SequenceEqual(args, typeArguments))) { closed = null; return false; } _appliedArguments.Add(typeArguments); var closedType = _partType.MakeGenericType(typeArguments).GetTypeInfo(); var result = new DiscoveredPart(closedType, _attributeContext, _activationFeatures, _partMetadata); foreach (var export in _exports) { var closedExport = export.CloseGenericExport(closedType, typeArguments); result.AddDiscoveredExport(closedExport); } closed = result; return true; }
public bool TryCloseGenericPart(Type[] typeArguments, out DiscoveredPart closed) { for (int index = 0; index < _partType.GenericTypeParameters.Length; index++) { foreach (var genericParameterConstraints in _partType.GenericTypeParameters[index].GetTypeInfo().GetGenericParameterConstraints()) { if (!genericParameterConstraints.GetTypeInfo().IsAssignableFrom(typeArguments[index].GetTypeInfo())) { closed = null; return false; } } } if (_appliedArguments.Any(args => Enumerable.SequenceEqual(args, typeArguments))) { closed = null; return false; } _appliedArguments.Add(typeArguments); var closedType = _partType.MakeGenericType(typeArguments).GetTypeInfo(); var result = new DiscoveredPart(closedType, _attributeContext, _activationFeatures, _partMetadata); foreach (var export in _exports) { var closedExport = export.CloseGenericExport(closedType, typeArguments); result.AddDiscoveredExport(closedExport); } closed = result; return true; }