public LaunchProfileProjectPropertiesProvider(
     UnconfiguredProject project,
     ILaunchSettingsProvider3 launchSettingsProvider,
     [ImportMany] IEnumerable <Lazy <ILaunchProfileExtensionValueProvider, ILaunchProfileExtensionValueProviderMetadata> > launchProfileExtensionValueProviders,
     [ImportMany] IEnumerable <Lazy <IGlobalSettingExtensionValueProvider, ILaunchProfileExtensionValueProviderMetadata> > globalSettingExtensionValueProviders)
 {
     _project = project;
     _launchSettingsProvider = launchSettingsProvider;
     _launchProfileExtensionValueProviders = launchProfileExtensionValueProviders.ToImmutableArray();
     _globalSettingExtensionValueProviders = globalSettingExtensionValueProviders.ToImmutableArray();
 }
        public LaunchProfileProjectProperties(
            string filePath,
            string profileName,
            ILaunchSettingsProvider3 launchSettingsProvider,
            ImmutableArray <LaunchProfileValueProviderAndMetadata> launchProfileExtensionValueProviders,
            ImmutableArray <GlobalSettingValueProviderAndMetadata> globalSettingExtensionValueProviders)
        {
            _context = new LaunchProfilePropertiesContext(filePath, profileName);
            _launchSettingsProvider = launchSettingsProvider;

            ImmutableDictionary <string, LaunchProfileValueProviderAndMetadata> .Builder launchProfileValueBuilder =
                ImmutableDictionary.CreateBuilder <string, LaunchProfileValueProviderAndMetadata>(StringComparers.PropertyNames);
            foreach (LaunchProfileValueProviderAndMetadata valueProvider in launchProfileExtensionValueProviders)
            {
                string[] propertyNames = valueProvider.Metadata.PropertyNames;

                foreach (string propertyName in propertyNames)
                {
                    Requires.Argument(!string.IsNullOrEmpty(propertyName), nameof(valueProvider), "A null or empty property name was found");

                    // CONSIDER: Allow duplicate intercepting property value providers for same property name.
                    Requires.Argument(!launchProfileValueBuilder.ContainsKey(propertyName), nameof(launchProfileValueBuilder), "Duplicate property value providers for same property name");

                    launchProfileValueBuilder.Add(propertyName, valueProvider);
                }
            }
            _launchProfileValueProviders = launchProfileValueBuilder.ToImmutable();

            ImmutableDictionary <string, GlobalSettingValueProviderAndMetadata> .Builder globalSettingValueBuilder =
                ImmutableDictionary.CreateBuilder <string, GlobalSettingValueProviderAndMetadata>(StringComparers.PropertyNames);
            foreach (GlobalSettingValueProviderAndMetadata valueProvider in globalSettingExtensionValueProviders)
            {
                string[] propertyNames = valueProvider.Metadata.PropertyNames;

                foreach (string propertyName in propertyNames)
                {
                    Requires.Argument(!string.IsNullOrEmpty(propertyName), nameof(valueProvider), "A null or empty property name was found");

                    // CONSIDER: Allow duplicate intercepting property value providers for same property name.
                    Requires.Argument(!globalSettingValueBuilder.ContainsKey(propertyName), nameof(globalSettingValueBuilder), "Duplicate property value providers for same property name");

                    globalSettingValueBuilder.Add(propertyName, valueProvider);
                }
            }
            _globalSettingValueProviders = globalSettingValueBuilder.ToImmutable();
        }