private List <IFileProvider> GetAllFileProviders( IHostingEnvironment hostingEnvironment, IEnumerable <IEmbeddedResourceRouteRegistration> embeddedResourceRouteRegistrations, IEmbeddedFileProviderFactory embeddedFileProviderFactory ) { var allFileProviders = new List <IFileProvider>(); allFileProviders.Add(hostingEnvironment.WebRootFileProvider); var assemblyRoutes = EnumerableHelper .Enumerate(embeddedResourceRouteRegistrations) .SelectMany(r => r.GetEmbeddedResourcePaths()) .GroupBy(r => r.Assembly) .ToList(); foreach (var assemblyRoute in assemblyRoutes) { var fileProvider = embeddedFileProviderFactory.Create(assemblyRoute.Key); foreach (var route in assemblyRoute) { var filteredFileProvider = new FilteredEmbeddedFileProvider( fileProvider, route.Path, route.RewriteFrom, hostingEnvironment.ContentRootFileProvider ); allFileProviders.Add(filteredFileProvider); } } return(allFileProviders); }
private static IEnumerable <IFileProvider> CreateAssemblyProviders( IEnumerable <IAssemblyResourceRegistration> assemblyResourceRegistrations, IEmbeddedFileProviderFactory embeddedFileProviderFactory ) { return(assemblyResourceRegistrations .Select(r => r.GetType().GetTypeInfo().Assembly) .Distinct() .Select(a => embeddedFileProviderFactory.Create(a))); }
public ResourceFileProviderFactory( IEnumerable <IAssemblyResourceRegistration> assemblyResourceRegistrations, IEnumerable <IResourceFileProviderRegistration> resourceFileProviderRegistrations, IEmbeddedFileProviderFactory embeddedFileProviderFactory ) { // Give preference to physical providers local to the project over embedded providers _providers = resourceFileProviderRegistrations .SelectMany(r => r.GetFileProviders()) .OrderByDescending(r => r is PhysicalFileProvider) .ThenByDescending(r => r is CompositeFileProvider) .ToList() .Union(CreateAssemblyProviders(assemblyResourceRegistrations, embeddedFileProviderFactory)) .ToArray(); }