/// <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 }, }); }
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 }, }); }
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); }
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); } }