bool IsFeatureRequired(ShellFeature feature) { // Mark SetUp as required if (feature.ModuleId.Equals("Plato.SetUp", StringComparison.InvariantCultureIgnoreCase)) { return(true); } // Returns true if the supplied feature exists within our minimal shell descriptor var minimalDescriptor = _shellContextFactory.MinimumShellDescriptor(); return(minimalDescriptor.Modules.FirstOrDefault(m => m.ModuleId.Equals(feature.ModuleId, StringComparison.OrdinalIgnoreCase)) != null); }
async Task EnsureFeaturesLoadedAsync() { if (_features == null) { _features = new ConcurrentDictionary <string, IShellFeature>(); var modules = await _moduleManager.LoadModulesAsync(); if (modules != null) { // Get explicitly enabled features var enabledFeatures = await GetEnabledFeaturesAsync(); var enabledFeatureNames = enabledFeatures .Select(f => f.ModuleId).ToArray(); // Build features and dependencies foreach (var module in modules) { var feature = new ShellFeature(module); feature.IsRequired = IsFeatureRequired(feature); if (enabledFeatureNames.Contains(module.Descriptor.Id)) { feature.IsEnabled = true; } foreach (var dependency in module.Descriptor.Dependencies) { if (enabledFeatureNames.Contains(dependency.Id)) { dependency.IsEnabled = true; } } _features.TryAdd(module.Descriptor.Id, feature); } } } }