public static void Register() { _extensionLoader = new ExtensionLoader(); var viewProvider = new EmbeddedViewFileProvider(); var contentProvider = new EmbeddedFileProvider(); var provider = new AggregateVirtualPathProvider(viewProvider, contentProvider); HostingEnvironment.RegisterVirtualPathProvider(provider); var config = CoreConfiguration.Current.Extensibility; if (config == null) return; // automatic extension discovery with '*.Extension.dll' convention if (config.AutomaticExtensionDiscovery) { _extensionLoader.LoadExtensions(); foreach (var assembly in _extensionLoader.Assemblies) { viewProvider.Add(assembly); contentProvider.Add(assembly); } } else { // controlled extension discovery based on web.config (without conventions) foreach (var ext in config.Extensions .OfType<ExtensionElement>() .Distinct(new ExtensionElementNameComparer())) { var assembly = _extensionLoader.TryLoadAssemblyByName(ext.Name); if (assembly == null) continue; var mapping = new NamespaceMapping(assembly, ext.Namespace); viewProvider.Add(mapping); contentProvider.Add(mapping); } } }
/// <summary> /// Add a namespace mapping for embedded resources. /// </summary> /// <param name="mapping"> Mapping to add </param> public virtual void Add(NamespaceMapping mapping) { if (mapping == null) throw new ArgumentNullException("mapping"); Map(mapping); }
/// <summary> /// Create mappings for all resources in a specific namespace (and all sub namespaces). /// </summary> /// <param name="mapping">Mapping to load embedded resources in</param> protected void Map(NamespaceMapping mapping) { if (mapping == null) throw new ArgumentNullException("mapping"); var names = mapping.Assembly.GetManifestResourceNames(); foreach (var name in names) { if (!name.StartsWith(mapping.FolderNamespace)) continue; if (!IsFileAllowed(name)) continue; _resourceNames.Add(new MappedResource { Assembly = mapping.Assembly, AssemblyDate = new FileInfo(mapping.Assembly.Location).CreationTimeUtc, FullResourceName = name, ResourceRoot = mapping.FolderNamespace, ResourceName = name.Remove(0, mapping.FolderNamespace.Length + 1) // include the last dot }); } }