using System.IO; using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.FileProviders; using xCommons.Extensions; using xExceptions.Constants; using xStorageService.Constants; using xStorageService.Helpers; using xStorageService.Interfaces; using xStorageService.Models; using xStorageService.Providers; namespace xStorageService.DI { public static partial class XDIHelperExtension { /// /// Retrieve XStorage Configuration from AppSettings /// /// /// public static XStorageConfiguration GetXStorageConfiguration (this IConfiguration configuration) { // var storageConfigurationSection = configuration.GetSection (ConfigurationNodeNames.STORAGE_SERVICE_NODE_NAME); return storageConfigurationSection.Get (); } /// /// Register XStorage Configuration /// /// /// public static void AddXStorageConfiguration ( this IServiceCollection services, IConfiguration configuration ) { // // Check wwwroot Folder ... if (!Directory.Exists ("wwwroot")) { Directory.CreateDirectory ("wwwroot"); } // // Retrieve and Register XStorage Configurations ... var xStorageConfiguration = configuration.GetXStorageConfiguration (); if (xStorageConfiguration.IsNull ()) { XException.InvalidConfiguration.Throw (); } // xStorageConfiguration.BaseFolder = Path.Combine (Directory.GetCurrentDirectory (), "wwwroot"); xStorageConfiguration.RootFolder = Directory.GetDirectoryRoot (xStorageConfiguration.BaseFolder); // services.AddSingleton (xStorageConfiguration); } /// /// Register XStorage Service /// /// /// public static void AddXStorageService ( this IServiceCollection services, IConfiguration configuration ) { // // Register and Retrieve XStorage Configuration services.AddXStorageConfiguration (configuration); var xStorageConfiguration = services.GetRegisteredService (); // // Add File Provider ... services.AddSingleton ( new PhysicalFileProvider (xStorageConfiguration.BaseFolder) ); // // Register XStorageHelper Service ... services.AddSingleton (); // // Register ThumbnailHelper ... services.AddSingleton (); // // Register Storage Provider ... services.AddScoped (); // // StorageService Preperation... var xStorageService = services.GetRegisteredService (); xStorageService.Prepare (); } /// /// Use XStorage Service /// /// public static void UseXStorageService (this IApplicationBuilder app) { // // Get Instance of Scope and Service and Prepare Folder Structure ... using (var scope = app.ApplicationServices.CreateScope ()) { // var storageProvider = scope.ServiceProvider.GetService (); // storageProvider.Prepare (); } // // available Static Files ... app.UseStaticFiles (); } } }