public ParameterSet Resolve() { if (ParameterSets.Count == 1) { Logger.Debug( "Only one parameter set defined: {DefaultParameterSetName}", DefaultParameterSet.Name ); return(DefaultParameterSet); } var candidates = Parameters.Aggregate( ParameterSets, RemoveCandidateIfParamDefault ); if (candidates.Count == 0) { Logger.Debug( "No parameter set matched, assuming default {DefaultParameterSetName}", DefaultParameterSet.Name ); return(DefaultParameterSet); } if ((candidates.Count > 1) && (candidates.ContainsKey(ImplicitParameterSetName))) { candidates = candidates.Remove(ImplicitParameterSetName); } if (candidates.Count == 1) { var result = candidates.Values.Single(); Logger.Debug( "Matched parameter set {ParameterSetName}", result.Name ); return(result); } throw Logger.Fatal.InvalidOperation(SR.ParameterSetResolver_Ambiguous); }
public void Bind(ITrackValueSource target, HarshProvisionerContextBase context) { if (target == null) { throw Logger.Fatal.ArgumentNull(nameof(target)); } if (context == null) { throw Logger.Fatal.ArgumentNull(nameof(context)); } foreach (var prop in Properties) { var value = prop.Accessor.GetValue(target); if (value != null) { Logger.Debug( "Property {PropertyName} already has non-null value, skipping", prop.Name ); continue; } value = GetValueFromContext(prop, context); if (value != null) { Logger.Debug( "Setting property {PropertyName} to {$Value}", prop.Name, value ); prop.Accessor.SetValue(target, value, DefaultFromContextPropertyValueSource.Instance); } else { Logger.Debug( "Got null from context for property {PropertyName}, skipping", prop.Name ); } } }
public IEnumerable <ParameterSet> Build() { Logger.Debug( "Building parameter set metadata for {ProcessedType}", Metadata ); Logger.Debug( "{ProcessedType}: Default parameter set name: {DefaultParameterSetName}", Metadata, DefaultParameterSetName ); var parameters = BuildParameterMetadata().ToArray(); Logger.Debug( "{ProcessedType}: All parameters: {@Parameters}", Metadata, parameters ); var commonParameters = parameters .Where(p => p.IsCommonParameter) .ToArray(); Logger.Debug( "{ProcessedType}: Common parameters: {@CommonParameters}", Metadata, commonParameters ); var parameterSets = parameters .Where(p => !p.IsCommonParameter) .GroupBy(p => p.ParameterSetName, ParameterSet.NameComparer) .Select( set => new ParameterSet( set.Key, set.Concat(commonParameters), IsDefaultParameterSet(set.Key) ) ) .ToList(); if (!parameterSets.Any(set => set.IsDefault)) { if (DefaultParameterSetName != null) { throw Logger.Fatal.ObjectMetadata( SR.HarshProvisionerMetadata_DefaultParameterSetNotFound, DefaultParameterSetName, Metadata ); } var implicitParameterSet = new ParameterSet( ParameterSet.ImplicitParameterSetName, commonParameters, isDefault: true ); Logger.Debug( "{ProcessedType}: Implicit parameter set: {@ImplicitParameterSet}", Metadata, implicitParameterSet ); parameterSets.Add(implicitParameterSet); } Logger.Debug( "{ProcessedType}: Parameter sets: {@ParameterSets}", Metadata, parameterSets ); return(parameterSets); }