예제 #1
0
        /// <summary>
        /// 探测。
        /// </summary>
        /// <param name="descriptor">扩展描述符条目。</param>
        /// <returns>扩展探测条目。</returns>
        public override ExtensionProbeEntry Probe(ExtensionDescriptorEntry descriptor)
        {
            if (Disabled)
            {
                return(null);
            }

            var assembly = _buildManager.GetReferencedAssembly(descriptor.Id);

            if (assembly == null)
            {
                return(null);
            }

            var assemblyPath = _virtualPathProvider.Combine("~/bin", descriptor.Id + ".dll");

            return(new ExtensionProbeEntry
            {
                Descriptor = descriptor,
                Loader = this,
                Priority = 100, //更高的优先级,因为在~/bin中的程序集总是优先
                VirtualPath = assemblyPath,
                VirtualPathDependencies = new[] { assemblyPath },
            });
        }
예제 #2
0
        public override ExtensionProbeEntry Probe(ExtensionDescriptor descriptor)
        {
            if (Disabled)
            {
                return(null);
            }

            var assembly = _buildManager.GetReferencedAssembly(descriptor.Id);

            if (assembly == null)
            {
                return(null);
            }

            var assemblyPath = _virtualPathProvider.Combine("~/bin", descriptor.Id + ".dll");

            return(new ExtensionProbeEntry
            {
                Descriptor = descriptor,
                Loader = this,
                Priority = 100, // Higher priority because assemblies in ~/bin always take precedence
                VirtualPath = assemblyPath,
                VirtualPathDependencies = new[] { assemblyPath },
            });
        }
예제 #3
0
        private IEnumerable <FeatureDescriptor> GetFeaturesForExtension(ExtensionDescriptor extensionDescriptor)
        {
            var featureDescriptors = new List <FeatureDescriptor>();

            if (extensionDescriptor.ExtensionType == "Module")
            {
                var assembly = buildManager.GetReferencedAssembly(extensionDescriptor.Id);
                if (assembly != null)
                {
                    var types           = assembly.GetExportedTypes();
                    var featureProvider = typeof(IFeatureProvider);

                    var features = types.Where(x => x.IsClass && !x.IsAbstract && featureProvider.IsAssignableFrom(x))
                                   .Select(x => (IFeatureProvider)Activator.CreateInstance(x))
                                   .SelectMany(x => x.AvailableFeatures())
                                   .ToList();

                    foreach (var feature in features)
                    {
                        feature.Extension = extensionDescriptor;
                        featureDescriptors.Add(feature);
                    }
                }
            }
            else if (extensionDescriptor.ExtensionType == "Theme")
            {
                var feature = new FeatureDescriptor
                {
                    Id        = extensionDescriptor.Id,
                    Name      = extensionDescriptor.Name,
                    Category  = "Themes",
                    Extension = extensionDescriptor
                };
                featureDescriptors.Add(feature);
            }

            return(featureDescriptors);
        }
예제 #4
0
        public IEnumerable <ExtensionDescriptor> AvailableExtensions()
        {
            foreach (ModuleProviderConfigurationElement module in CMSConfigurationSection.Instance.Modules)
            {
                var assembly = buildManager.GetReferencedAssembly(module.Id);
                if (assembly == null)
                {
                    continue;
                }

                var extensionDescriptor = new ExtensionDescriptor
                {
                    Id            = module.Id,
                    Name          = module.Name,
                    Location      = "~/Modules/" + module.Id,
                    ExtensionType = "Module"
                };

                extensionDescriptor.Features = GetFeatures(extensionDescriptor, assembly, module.Category);

                yield return(extensionDescriptor);
            }
        }