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 ();
}
}
}