示例#1
0
        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);
        }
示例#2
0
        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);
        }