Maps a namespace to a virtual path
Exemplo n.º 1
0
        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);
            }
              }
        }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
0
        /// <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
            });
              }
        }