private IEnumerable <DependencyRequirement> getResourceDependencyRequirements(IResource resource) { var requirements = context.ExplicitDependencyRequirements.ContainsKey(resource) ? context.ExplicitDependencyRequirements[resource] : new List <DependencyRequirement>(); var propertiesWithTypeResourceAndSetters = resource.GetType().GetProperties() .Where(DependencyUtils.PropertyIsResource) .Where(DependencyUtils.PropertiesHasSetter); foreach (var property in propertiesWithTypeResourceAndSetters) { var dependencyAttribute = DependencyUtils.GetDependencyAttribute(property); var propertyIsAlreadyInExplicitRequirements = requirements.Any(requirement => requirement.Property.Name == property.Name); var propertyIsAnOptionalDependency = dependencyAttribute != null ? dependencyAttribute.Optional : false; if (!propertyIsAlreadyInExplicitRequirements && !propertyIsAnOptionalDependency) { var missingDependency = new DependencyRequirement { Property = property, ValueName = "default" }; requirements.Add(missingDependency); } } return(requirements); }
private static IEnumerable <ResourceProperty> discoverResourceProperties(Type t) => t.GetProperties() .Where(DependencyUtils.IsUserFacingProperty) .Select(property => { var dependencyAttribute = DependencyUtils.GetDependencyAttribute(property); return(new ResourceProperty() { Name = property.Name, Type = formatPropertyType(property), Description = dependencyAttribute?.Description }); });