using System.IO; using System.Linq; using DashboardDemo.Dashboards; using Localization.Resources.AbpUi; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection; using DashboardDemo.EntityFrameworkCore; using DashboardDemo.Localization.DashboardDemo; using DashboardDemo.Menus; using DashboardDemo.Pages.widgets; using DashboardDemo.Permissions; using DashboardDemo.Widgets; using Swashbuckle.AspNetCore.Swagger; using Volo.Abp; using Volo.Abp.Account.Web; using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc.Localization; using Volo.Abp.AspNetCore.Mvc.UI; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap; using Volo.Abp.AspNetCore.Mvc.UI.Bundling; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic; using Volo.Abp.AspNetCore.Mvc.UI.Dashboards; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; using Volo.Abp.AspNetCore.Mvc.UI.Widgets; using Volo.Abp.Authorization.Permissions; using Volo.Abp.Autofac; using Volo.Abp.AutoMapper; using Volo.Abp.Data; using Volo.Abp.Identity; using Volo.Abp.Identity.Web; using Volo.Abp.Localization; using Volo.Abp.Localization.Resources.AbpValidation; using Volo.Abp.Modularity; using Volo.Abp.PermissionManagement.Web; using Volo.Abp.Threading; using Volo.Abp.UI; using Volo.Abp.UI.Navigation; using Volo.Abp.VirtualFileSystem; using Volo.Abp.PermissionManagement; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.TenantManagement.Web; namespace DashboardDemo { [DependsOn( typeof(DashboardDemoApplicationModule), typeof(DashboardDemoEntityFrameworkCoreModule), typeof(AbpAutofacModule), typeof(AbpIdentityWebModule), typeof(AbpAccountWebModule), typeof(AbpAspNetCoreMvcUiBasicThemeModule), typeof(AbpAspNetCoreMvcUiDashboardsModule), typeof(AbpTenantManagementWebModule) )] public class DashboardDemoWebModule : AbpModule { public override void PreConfigureServices(ServiceConfigurationContext context) { context.Services.PreConfigure(options => { options.AddAssemblyResource( typeof(DashboardDemoResource), typeof(DashboardDemoDomainModule).Assembly, typeof(DashboardDemoApplicationModule).Assembly, typeof(DashboardDemoWebModule).Assembly ); }); } public override void ConfigureServices(ServiceConfigurationContext context) { var hostingEnvironment = context.Services.GetHostingEnvironment(); var configuration = context.Services.GetConfiguration(); ConfigureWidgets(); ConfigureDashboards(); ConfigureDatabaseServices(); ConfigureAutoMapper(); ConfigureVirtualFileSystem(hostingEnvironment); ConfigureLocalizationServices(); ConfigureNavigationServices(); ConfigureAutoApiControllers(); ConfigureSwaggerServices(context.Services); } private void ConfigureWidgets() { Configure(options => { options.Widgets.AddRange(WidgetDefinitionProvider.GetDefinitions()); }); } private void ConfigureDashboards() { Configure(options => { options.Dashboards.AddRange(DashboardDefinitionProvider.GetDefinitions()); }); Configure(options => { options.ScriptBundles.Add("MyDashboard", configuration => { configuration.AddContributors(typeof(MyDashboardScriptBundleContributor)); }); }); } private void ConfigureDatabaseServices() { Configure(options => { options.UseSqlServer(); }); } private void ConfigureAutoMapper() { Configure(options => { options.AddProfile(); }); } private void ConfigureVirtualFileSystem(IHostingEnvironment hostingEnvironment) { if (hostingEnvironment.IsDevelopment()) { Configure(options => { options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}DashboardDemo.Domain", Path.DirectorySeparatorChar))); }); } } private void ConfigureLocalizationServices() { Configure(options => { options.Resources .Get() .AddBaseTypes( typeof(AbpValidationResource), typeof(AbpUiResource) ); options.Languages.Add(new LanguageInfo("en", "en", "English")); options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português")); options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe")); options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文")); }); } private void ConfigureNavigationServices() { Configure(options => { options.MenuContributors.Add(new DashboardDemoMenuContributor()); }); } private void ConfigureAutoApiControllers() { Configure(options => { options.ConventionalControllers.Create(typeof(DashboardDemoApplicationModule).Assembly); }); } private void ConfigureSwaggerServices(IServiceCollection services) { services.AddSwaggerGen( options => { options.SwaggerDoc("v1", new Info { Title = "DashboardDemo API", Version = "v1" }); options.DocInclusionPredicate((docName, description) => true); options.CustomSchemaIds(type => type.FullName); }); } public override void OnApplicationInitialization(ApplicationInitializationContext context) { var app = context.GetApplicationBuilder(); var env = context.GetEnvironment(); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseErrorPage(); } app.UseVirtualFiles(); app.UseAuthentication(); if (DashboardDemoConsts.IsMultiTenancyEnabled) { app.UseMultiTenancy(); } app.UseAbpRequestLocalization(); app.UseSwagger(); app.UseSwaggerUI(options => { options.SwaggerEndpoint("/swagger/v1/swagger.json", "DashboardDemo API"); }); app.UseAuditing(); app.UseMvcWithDefaultRouteAndArea(); SeedDatabase(context); } private static void SeedDatabase(ApplicationInitializationContext context) { using (var scope = context.ServiceProvider.CreateScope()) { AsyncHelper.RunSync(async () => { await scope.ServiceProvider .GetRequiredService() .SeedAsync(); }); } } } }