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(); }