public FieldConfigurator MarkAvailable <TManifest>(string label, AvailabilityType availabilityType, bool suppressFieldDiscovery = false) where TManifest : Manifest { EnsureAvailableDataCrate(); var manifestType = ManifestDiscovery.Default.GetManifestType <TManifest>(); var fields = new List <FieldDTO>(); if (!suppressFieldDiscovery) { var members = Fr8ReflectionHelper.GetMembers(typeof(TManifest)) .Where(x => Fr8ReflectionHelper.IsPrimitiveType(x.MemberType)) .Where(x => Fr8ReflectionHelper.CheckAttributeOrTrue <ManifestFieldAttribute>(x, y => !y.IsHidden)); foreach (var memberAccessor in members) { fields.Add(new FieldDTO(memberAccessor.Name, AvailabilityType.RunTime) { SourceCrateLabel = label, SourceCrateManifest = manifestType }); } } _availableData.AddOrUpdate(new CrateDescriptionDTO { Label = label, ManifestId = manifestType.Id, ManifestType = manifestType.Type, ProducedBy = _owner, Fields = fields }); return(new FieldConfigurator(fields, label, manifestType, _sourceActivityId, availabilityType)); }
public FieldConfigurator MarkAvailable(CrateManifestType manifestType, string label, AvailabilityType availabilityType) { EnsureAvailableDataCrate(); var fields = new List <FieldDTO>(); _availableData.AddOrUpdate(new CrateDescriptionDTO { Availability = availabilityType, Label = label, ManifestId = manifestType.Id, ManifestType = manifestType.Type, ProducedBy = _owner, SourceActivityId = _sourceActivityId.ToString(), Fields = fields }); return(new FieldConfigurator(fields)); }