abp
/
MyProjectNameModule.cs
400 строк · 14.2 Кб
1using Blazorise.Bootstrap5;2using Blazorise.Icons.FontAwesome;3using Microsoft.AspNetCore.Extensions.DependencyInjection;4using Microsoft.Extensions.DependencyInjection.Extensions;5using Microsoft.Extensions.Options;6using Microsoft.OpenApi.Models;7using MyCompanyName.MyProjectName.Blazor.Server.Mongo.Components;8using MyCompanyName.MyProjectName.Data;9using MyCompanyName.MyProjectName.Localization;10using MyCompanyName.MyProjectName.Menus;11using OpenIddict.Validation.AspNetCore;12using Volo.Abp;13using Volo.Abp.Account;14using Volo.Abp.Account.Web;15using Volo.Abp.AspNetCore.Components.Web;16using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite;17using Volo.Abp.AspNetCore.Components.Server.LeptonXLiteTheme;18using Volo.Abp.AspNetCore.Components.Server.LeptonXLiteTheme.Bundling;19using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite.Bundling;20using Volo.Abp.AspNetCore.Components.Web.Theming.Routing;21using Volo.Abp.AspNetCore.Mvc;22using Volo.Abp.AspNetCore.Mvc.Localization;23using Volo.Abp.AspNetCore.Mvc.UI.Bundling;24using Volo.Abp.AspNetCore.Serilog;25using Volo.Abp.AuditLogging.MongoDB;26using Volo.Abp.Autofac;27using Volo.Abp.AutoMapper;28using Volo.Abp.MongoDB;29using Volo.Abp.Emailing;30using Volo.Abp.FeatureManagement;31using Volo.Abp.FeatureManagement.Blazor.Server;32using Volo.Abp.FeatureManagement.MongoDB;33using Volo.Abp.Identity;34using Volo.Abp.Identity.Blazor.Server;35using Volo.Abp.Identity.MongoDB;36using Volo.Abp.Localization;37using Volo.Abp.Localization.ExceptionHandling;38using Volo.Abp.Modularity;39using Volo.Abp.OpenIddict.MongoDB;40using Volo.Abp.PermissionManagement;41using Volo.Abp.PermissionManagement.MongoDB;42using Volo.Abp.PermissionManagement.HttpApi;43using Volo.Abp.PermissionManagement.Identity;44using Volo.Abp.PermissionManagement.OpenIddict;45using Volo.Abp.SettingManagement;46using Volo.Abp.SettingManagement.Blazor.Server;47using Volo.Abp.SettingManagement.MongoDB;48using Volo.Abp.Swashbuckle;49using Volo.Abp.TenantManagement;50using Volo.Abp.TenantManagement.Blazor.Server;51using Volo.Abp.TenantManagement.MongoDB;52using Volo.Abp.OpenIddict;53using Volo.Abp.Security.Claims;54using Volo.Abp.UI.Navigation;55using Volo.Abp.UI.Navigation.Urls;56using Volo.Abp.Uow;57using Volo.Abp.Validation.Localization;58using Volo.Abp.VirtualFileSystem;59
60namespace MyCompanyName.MyProjectName;61
62[DependsOn(63// ABP Framework packages64typeof(AbpAspNetCoreMvcModule),65typeof(AbpAutofacModule),66typeof(AbpAutoMapperModule),67typeof(AbpSwashbuckleModule),68typeof(AbpAspNetCoreSerilogModule),69typeof(AbpAspNetCoreMvcUiLeptonXLiteThemeModule),70typeof(AbpAspNetCoreComponentsServerLeptonXLiteThemeModule),71
72// Account module packages73typeof(AbpAccountApplicationModule),74typeof(AbpAccountHttpApiModule),75typeof(AbpAccountWebOpenIddictModule),76
77// Identity module packages78typeof(AbpPermissionManagementDomainIdentityModule),79typeof(AbpPermissionManagementDomainOpenIddictModule),80typeof(AbpIdentityApplicationModule),81typeof(AbpIdentityHttpApiModule),82typeof(AbpIdentityMongoDbModule),83typeof(AbpOpenIddictMongoDbModule),84typeof(AbpIdentityBlazorServerModule),85
86// Audit logging module packages87typeof(AbpAuditLoggingMongoDbModule),88
89// Permission Management module packages90typeof(AbpPermissionManagementApplicationModule),91typeof(AbpPermissionManagementHttpApiModule),92typeof(AbpPermissionManagementMongoDbModule),93
94// Tenant Management module packages95typeof(AbpTenantManagementApplicationModule),96typeof(AbpTenantManagementHttpApiModule),97typeof(AbpTenantManagementMongoDbModule),98typeof(AbpTenantManagementBlazorServerModule),99
100// Feature Management module packages101typeof(AbpFeatureManagementApplicationModule),102typeof(AbpFeatureManagementMongoDbModule),103typeof(AbpFeatureManagementHttpApiModule),104typeof(AbpFeatureManagementBlazorServerModule),105
106// Setting Management module packages107typeof(AbpSettingManagementApplicationModule),108typeof(AbpSettingManagementMongoDbModule),109typeof(AbpSettingManagementHttpApiModule),110typeof(AbpSettingManagementBlazorServerModule)111)]112public class MyProjectNameModule : AbpModule113{
114/* Single point to enable/disable multi-tenancy */115public const bool IsMultiTenant = true;116
117public override void PreConfigureServices(ServiceConfigurationContext context)118{119var hostingEnvironment = context.Services.GetHostingEnvironment();120var configuration = context.Services.GetConfiguration();121
122context.Services.PreConfigure<AbpMvcDataAnnotationsLocalizationOptions>(options =>123{124options.AddAssemblyResource(125typeof(MyProjectNameResource),126typeof(MyProjectNameModule).Assembly127);128});129
130PreConfigure<OpenIddictBuilder>(builder =>131{132builder.AddValidation(options =>133{134options.AddAudiences("MyProjectName");135options.UseLocalServer();136options.UseAspNetCore();137});138});139
140if (!hostingEnvironment.IsDevelopment())141{142PreConfigure<AbpOpenIddictAspNetCoreOptions>(options =>143{144options.AddDevelopmentEncryptionAndSigningCertificate = false;145});146
147PreConfigure<OpenIddictServerBuilder>(serverBuilder =>148{149serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000");150});151}152
153PreConfigure<AbpAspNetCoreComponentsWebOptions>(options =>154{155options.IsBlazorWebApp = true;156});157
158MyProjectNameGlobalFeatureConfigurator.Configure();159MyProjectNameModuleExtensionConfigurator.Configure();160}161
162public override void ConfigureServices(ServiceConfigurationContext context)163{164var hostingEnvironment = context.Services.GetHostingEnvironment();165var configuration = context.Services.GetConfiguration();166
167if (hostingEnvironment.IsDevelopment())168{169context.Services.Replace(ServiceDescriptor.Singleton<IEmailSender, NullEmailSender>());170}171
172// Add services to the container.173context.Services.AddRazorComponents()174.AddInteractiveServerComponents();175
176ConfigureAuthentication(context);177ConfigureUrls(configuration);178ConfigureBundles();179ConfigureAutoMapper(context);180ConfigureVirtualFiles(hostingEnvironment);181ConfigureLocalizationServices();182ConfigureSwaggerServices(context.Services);183ConfigureNavigationServices();184ConfigureAutoApiControllers();185ConfigureBlazorise(context);186ConfigureRouter(context);187ConfigureMongoDB(context);188}189
190private void ConfigureAuthentication(ServiceConfigurationContext context)191{192context.Services.ForwardIdentityAuthenticationForBearer(OpenIddictValidationAspNetCoreDefaults.AuthenticationScheme);193context.Services.Configure<AbpClaimsPrincipalFactoryOptions>(options =>194{195options.IsDynamicClaimsEnabled = true;196});197}198
199private void ConfigureUrls(IConfiguration configuration)200{201Configure<AppUrlOptions>(options =>202{203options.Applications["MVC"].RootUrl = configuration["App:SelfUrl"];204options.RedirectAllowedUrls.AddRange(configuration["App:RedirectAllowedUrls"]?.Split(',') ?? Array.Empty<string>());205});206}207
208private void ConfigureBundles()209{210Configure<AbpBundlingOptions>(options =>211{212// MVC UI213options.StyleBundles.Configure(214LeptonXLiteThemeBundles.Styles.Global,215bundle =>216{217bundle.AddFiles("/global-styles.css");218}219);220
221//BLAZOR UI222options.StyleBundles.Configure(223BlazorLeptonXLiteThemeBundles.Styles.Global,224bundle =>225{226bundle.AddFiles("/blazor-global-styles.css");227//You can remove the following line if you don't use Blazor CSS isolation for components228bundle.AddFiles(new BundleFile("/MyCompanyName.MyProjectName.Blazor.Server.Mongo.styles.css", true));229}230);231});232}233
234private void ConfigureLocalizationServices()235{236Configure<AbpLocalizationOptions>(options =>237{238options.Resources239.Add<MyProjectNameResource>("en")240.AddBaseTypes(typeof(AbpValidationResource))241.AddVirtualJson("/Localization/MyProjectName");242
243options.DefaultResourceType = typeof(MyProjectNameResource);244
245options.Languages.Add(new LanguageInfo("en", "en", "English"));246options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe"));247options.Languages.Add(new LanguageInfo("ar", "ar", "العربية"));248options.Languages.Add(new LanguageInfo("cs", "cs", "Čeština"));249options.Languages.Add(new LanguageInfo("en-GB", "en-GB", "English (UK)"));250options.Languages.Add(new LanguageInfo("hu", "hu", "Magyar"));251options.Languages.Add(new LanguageInfo("fi", "fi", "Finnish"));252options.Languages.Add(new LanguageInfo("fr", "fr", "Français"));253options.Languages.Add(new LanguageInfo("hi", "hi", "Hindi"));254options.Languages.Add(new LanguageInfo("is", "is", "Icelandic"));255options.Languages.Add(new LanguageInfo("it", "it", "Italiano"));256options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português"));257options.Languages.Add(new LanguageInfo("ro-RO", "ro-RO", "Română"));258options.Languages.Add(new LanguageInfo("ru", "ru", "Русский"));259options.Languages.Add(new LanguageInfo("sk", "sk", "Slovak"));260options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文"));261options.Languages.Add(new LanguageInfo("zh-Hant", "zh-Hant", "繁體中文"));262options.Languages.Add(new LanguageInfo("de-DE", "de-DE", "Deutsch"));263options.Languages.Add(new LanguageInfo("es", "es", "Español"));264options.Languages.Add(new LanguageInfo("el", "el", "Ελληνικά"));265});266
267Configure<AbpExceptionLocalizationOptions>(options =>268{269options.MapCodeNamespace("MyProjectName", typeof(MyProjectNameResource));270});271}272
273private void ConfigureVirtualFiles(IWebHostEnvironment hostingEnvironment)274{275Configure<AbpVirtualFileSystemOptions>(options =>276{277options.FileSets.AddEmbedded<MyProjectNameModule>();278if (hostingEnvironment.IsDevelopment())279{280/* Using physical files in development, so we don't need to recompile on changes */281options.FileSets.ReplaceEmbeddedByPhysical<MyProjectNameModule>(hostingEnvironment.ContentRootPath);282}283});284}285
286private void ConfigureSwaggerServices(IServiceCollection services)287{288services.AddAbpSwaggerGen(289options =>290{291options.SwaggerDoc("v1", new OpenApiInfo { Title = "MyProjectName API", Version = "v1" });292options.DocInclusionPredicate((docName, description) => true);293options.CustomSchemaIds(type => type.FullName);294}295);296}297
298private void ConfigureBlazorise(ServiceConfigurationContext context)299{300context.Services301.AddBootstrap5Providers()302.AddFontAwesomeIcons();303}304
305private void ConfigureRouter(ServiceConfigurationContext context)306{307Configure<AbpRouterOptions>(options =>308{309options.AppAssembly = typeof(MyProjectNameModule).Assembly;310});311}312
313private void ConfigureNavigationServices()314{315Configure<AbpNavigationOptions>(options =>316{317options.MenuContributors.Add(new MyProjectNameMenuContributor());318});319}320
321private void ConfigureAutoApiControllers()322{323Configure<AbpAspNetCoreMvcOptions>(options =>324{325options.ConventionalControllers.Create(typeof(MyProjectNameModule).Assembly);326});327}328
329private void ConfigureAutoMapper(ServiceConfigurationContext context)330{331context.Services.AddAutoMapperObjectMapper<MyProjectNameModule>();332Configure<AbpAutoMapperOptions>(options =>333{334options.AddMaps<MyProjectNameModule>();335});336}337
338private void ConfigureMongoDB(ServiceConfigurationContext context)339{340context.Services.AddMongoDbContext<MyProjectNameDbContext>(options =>341{342options.AddDefaultRepositories();343});344
345Configure<AbpUnitOfWorkDefaultOptions>(options =>346{347options.TransactionBehavior = UnitOfWorkTransactionBehavior.Disabled;348});349}350
351public override void OnApplicationInitialization(ApplicationInitializationContext context)352{353var env = context.GetEnvironment();354var app = context.GetApplicationBuilder();355
356app.UseAbpRequestLocalization();357
358if (env.IsDevelopment())359{360app.UseDeveloperExceptionPage();361}362else363{364app.UseExceptionHandler("/Error");365app.UseHsts();366}367
368app.UseHttpsRedirection();369app.UseCorrelationId();370app.UseStaticFiles();371app.UseRouting();372app.UseAuthentication();373app.UseAbpOpenIddictValidation();374
375if (IsMultiTenant)376{377app.UseMultiTenancy();378}379
380app.UseUnitOfWork();381app.UseDynamicClaims();382app.UseAntiforgery();383app.UseAuthorization();384
385app.UseSwagger();386app.UseAbpSwaggerUI(options =>387{388options.SwaggerEndpoint("/swagger/v1/swagger.json", "MyProjectName API");389});390
391app.UseAuditing();392app.UseAbpSerilogEnrichers();393app.UseConfiguredEndpoints(builder =>394{395builder.MapRazorComponents<App>()396.AddInteractiveServerRenderMode()397.AddAdditionalAssemblies(builder.ServiceProvider.GetRequiredService<IOptions<AbpRouterOptions>>().Value.AdditionalAssemblies.ToArray());398});399}400}
401