abp

Форк
0
376 строк · 13.3 Кб
1
using Microsoft.AspNetCore.Extensions.DependencyInjection;
2
using Microsoft.Extensions.DependencyInjection.Extensions;
3
using Microsoft.OpenApi.Models;
4
using MyCompanyName.MyProjectName.Data;
5
using MyCompanyName.MyProjectName.Localization;
6
using MyCompanyName.MyProjectName.Menus;
7
using OpenIddict.Validation.AspNetCore;
8
using Volo.Abp;
9
using Volo.Abp.Uow;
10
using Volo.Abp.Account;
11
using Volo.Abp.Account.Web;
12
using Volo.Abp.AspNetCore.Mvc;
13
using Volo.Abp.AspNetCore.Mvc.Localization;
14
using Volo.Abp.AspNetCore.Mvc.UI.Bundling;
15
using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite;
16
using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite.Bundling;
17
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared;
18
using Volo.Abp.AspNetCore.Serilog;
19
using Volo.Abp.AuditLogging.EntityFrameworkCore;
20
using Volo.Abp.Autofac;
21
using Volo.Abp.AutoMapper;
22
using Volo.Abp.Emailing;
23
using Volo.Abp.EntityFrameworkCore;
24
using Volo.Abp.EntityFrameworkCore.SqlServer;
25
using Volo.Abp.FeatureManagement;
26
using Volo.Abp.FeatureManagement.EntityFrameworkCore;
27
using Volo.Abp.Identity;
28
using Volo.Abp.Identity.EntityFrameworkCore;
29
using Volo.Abp.Identity.Web;
30
using Volo.Abp.Localization;
31
using Volo.Abp.Localization.ExceptionHandling;
32
using Volo.Abp.Modularity;
33
using Volo.Abp.MultiTenancy;
34
using Volo.Abp.OpenIddict.EntityFrameworkCore;
35
using Volo.Abp.PermissionManagement;
36
using Volo.Abp.PermissionManagement.EntityFrameworkCore;
37
using Volo.Abp.PermissionManagement.HttpApi;
38
using Volo.Abp.PermissionManagement.Identity;
39
using Volo.Abp.PermissionManagement.OpenIddict;
40
using Volo.Abp.SettingManagement;
41
using Volo.Abp.SettingManagement.EntityFrameworkCore;
42
using Volo.Abp.SettingManagement.Web;
43
using Volo.Abp.Swashbuckle;
44
using Volo.Abp.TenantManagement;
45
using Volo.Abp.TenantManagement.EntityFrameworkCore;
46
using Volo.Abp.TenantManagement.Web;
47
using Volo.Abp.OpenIddict;
48
using Volo.Abp.Security.Claims;
49
using Volo.Abp.UI.Navigation;
50
using Volo.Abp.UI.Navigation.Urls;
51
using Volo.Abp.Validation.Localization;
52
using Volo.Abp.VirtualFileSystem;
53

54
namespace MyCompanyName.MyProjectName;
55

56
[DependsOn(
57
    // ABP Framework packages
58
    typeof(AbpAspNetCoreMvcModule),
59
    typeof(AbpAutofacModule),
60
    typeof(AbpAutoMapperModule),
61
    typeof(AbpEntityFrameworkCoreSqlServerModule),
62
    typeof(AbpSwashbuckleModule),
63
    typeof(AbpAspNetCoreSerilogModule),
64
    typeof(AbpAspNetCoreMvcUiLeptonXLiteThemeModule),
65

66
    // Account module packages
67
    typeof(AbpAccountApplicationModule),
68
    typeof(AbpAccountHttpApiModule),
69
    typeof(AbpAccountWebOpenIddictModule),
70

71
    // Identity module packages
72
    typeof(AbpPermissionManagementDomainIdentityModule),
73
    typeof(AbpPermissionManagementDomainOpenIddictModule),
74
    typeof(AbpIdentityApplicationModule),
75
    typeof(AbpIdentityHttpApiModule),
76
    typeof(AbpIdentityEntityFrameworkCoreModule),
77
    typeof(AbpOpenIddictEntityFrameworkCoreModule),
78
    typeof(AbpIdentityWebModule),
79

80
    // Audit logging module packages
81
    typeof(AbpAuditLoggingEntityFrameworkCoreModule),
82

83
    // Permission Management module packages
84
    typeof(AbpPermissionManagementApplicationModule),
85
    typeof(AbpPermissionManagementHttpApiModule),
86
    typeof(AbpPermissionManagementEntityFrameworkCoreModule),
87

88
    // Tenant Management module packages
89
    typeof(AbpTenantManagementApplicationModule),
90
    typeof(AbpTenantManagementHttpApiModule),
91
    typeof(AbpTenantManagementEntityFrameworkCoreModule),
92
    typeof(AbpTenantManagementWebModule),
93

94
    // Feature Management module packages
95
    typeof(AbpFeatureManagementApplicationModule),
96
    typeof(AbpFeatureManagementEntityFrameworkCoreModule),
97
    typeof(AbpFeatureManagementHttpApiModule),
98
    typeof(AbpFeatureManagementWebModule),
99

100
    // Setting Management module packages
101
    typeof(AbpSettingManagementApplicationModule),
102
    typeof(AbpSettingManagementEntityFrameworkCoreModule),
103
    typeof(AbpSettingManagementHttpApiModule),
104
    typeof(AbpSettingManagementWebModule)
105
)]
106
public class MyProjectNameModule : AbpModule
107
{
108
    /* Single point to enable/disable multi-tenancy */
109
    public const bool IsMultiTenant = true;
110

111
    public override void PreConfigureServices(ServiceConfigurationContext context)
112
    {
113
        var hostingEnvironment = context.Services.GetHostingEnvironment();
114
        var configuration = context.Services.GetConfiguration();
115

116
        context.Services.PreConfigure<AbpMvcDataAnnotationsLocalizationOptions>(options =>
117
        {
118
            options.AddAssemblyResource(
119
                typeof(MyProjectNameResource)
120
            );
121
        });
122

123
        PreConfigure<OpenIddictBuilder>(builder =>
124
        {
125
            builder.AddValidation(options =>
126
            {
127
                options.AddAudiences("MyProjectName");
128
                options.UseLocalServer();
129
                options.UseAspNetCore();
130
            });
131
        });
132

133
        if (!hostingEnvironment.IsDevelopment())
134
        {
135
            PreConfigure<AbpOpenIddictAspNetCoreOptions>(options =>
136
            {
137
                options.AddDevelopmentEncryptionAndSigningCertificate = false;
138
            });
139

140
            PreConfigure<OpenIddictServerBuilder>(serverBuilder =>
141
            {
142
                serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000");
143
            });
144
        }
145
        
146
        MyProjectNameGlobalFeatureConfigurator.Configure();
147
        MyProjectNameModuleExtensionConfigurator.Configure();
148
        MyProjectNameEfCoreEntityExtensionMappings.Configure();
149
    }
150

151
    public override void ConfigureServices(ServiceConfigurationContext context)
152
    {
153
        var hostingEnvironment = context.Services.GetHostingEnvironment();
154
        var configuration = context.Services.GetConfiguration();
155

156
        if (hostingEnvironment.IsDevelopment())
157
        {
158
            context.Services.Replace(ServiceDescriptor.Singleton<IEmailSender, NullEmailSender>());
159
        }
160

161
        ConfigureAuthentication(context);
162
        ConfigureMultiTenancy();
163
        ConfigureUrls(configuration);
164
        ConfigureBundles();
165
        ConfigureAutoMapper(context);
166
        ConfigureSwagger(context.Services);
167
        ConfigureNavigationServices();
168
        ConfigureAutoApiControllers();
169
        ConfigureVirtualFiles(hostingEnvironment);
170
        ConfigureLocalization();
171
        ConfigureEfCore(context);
172
    }
173

174
    private void ConfigureAuthentication(ServiceConfigurationContext context)
175
    {
176
        context.Services.ForwardIdentityAuthenticationForBearer(OpenIddictValidationAspNetCoreDefaults.AuthenticationScheme);
177
        context.Services.Configure<AbpClaimsPrincipalFactoryOptions>(options =>
178
        {
179
            options.IsDynamicClaimsEnabled = true;
180
        });
181
    }
182

183
    private void ConfigureMultiTenancy()
184
    {
185
        Configure<AbpMultiTenancyOptions>(options =>
186
        {
187
            options.IsEnabled = IsMultiTenant;
188
        });
189
    }
190

191

192
    private void ConfigureUrls(IConfiguration configuration)
193
    {
194
        Configure<AppUrlOptions>(options =>
195
        {
196
            options.Applications["MVC"].RootUrl = configuration["App:SelfUrl"];
197
        });
198
    }
199

200
    private void ConfigureBundles()
201
    {
202
        Configure<AbpBundlingOptions>(options =>
203
        {
204
            options.StyleBundles.Configure(
205
                LeptonXLiteThemeBundles.Styles.Global,
206
                bundle =>
207
                {
208
                    bundle.AddFiles("/global-styles.css");
209
                }
210
            );
211
        });
212
    }
213

214
    private void ConfigureLocalization()
215
    {
216
        Configure<AbpLocalizationOptions>(options =>
217
        {
218
            options.Resources
219
                .Add<MyProjectNameResource>("en")
220
                .AddBaseTypes(typeof(AbpValidationResource))
221
                .AddVirtualJson("/Localization/MyProjectName");
222

223
            options.DefaultResourceType = typeof(MyProjectNameResource);
224

225
            options.Languages.Add(new LanguageInfo("en", "en", "English"));
226
            options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe"));
227
            options.Languages.Add(new LanguageInfo("ar", "ar", "العربية"));
228
            options.Languages.Add(new LanguageInfo("cs", "cs", "Čeština"));
229
            options.Languages.Add(new LanguageInfo("en-GB", "en-GB", "English (UK)"));
230
            options.Languages.Add(new LanguageInfo("hu", "hu", "Magyar"));
231
            options.Languages.Add(new LanguageInfo("fi", "fi", "Finnish"));
232
            options.Languages.Add(new LanguageInfo("fr", "fr", "Français"));
233
            options.Languages.Add(new LanguageInfo("hi", "hi", "Hindi"));
234
            options.Languages.Add(new LanguageInfo("is", "is", "Icelandic"));
235
            options.Languages.Add(new LanguageInfo("it", "it", "Italiano"));
236
            options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português"));
237
            options.Languages.Add(new LanguageInfo("ro-RO", "ro-RO", "Română"));
238
            options.Languages.Add(new LanguageInfo("ru", "ru", "Русский"));
239
            options.Languages.Add(new LanguageInfo("sk", "sk", "Slovak"));
240
            options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文"));
241
            options.Languages.Add(new LanguageInfo("zh-Hant", "zh-Hant", "繁體中文"));
242
            options.Languages.Add(new LanguageInfo("de-DE", "de-DE", "Deutsch"));
243
            options.Languages.Add(new LanguageInfo("es", "es", "Español"));
244
            options.Languages.Add(new LanguageInfo("el", "el", "Ελληνικά"));
245
        });
246

247
        Configure<AbpExceptionLocalizationOptions>(options =>
248
        {
249
            options.MapCodeNamespace("MyProjectName", typeof(MyProjectNameResource));
250
        });
251
    }
252

253
    private void ConfigureVirtualFiles(IWebHostEnvironment hostingEnvironment)
254
    {
255
        Configure<AbpVirtualFileSystemOptions>(options =>
256
        {
257
            options.FileSets.AddEmbedded<MyProjectNameModule>();
258
            if (hostingEnvironment.IsDevelopment())
259
            {
260
                /* Using physical files in development, so we don't need to recompile on changes */
261
                options.FileSets.ReplaceEmbeddedByPhysical<MyProjectNameModule>(hostingEnvironment.ContentRootPath);
262
            }
263
        });
264
    }
265

266
    private void ConfigureNavigationServices()
267
    {
268
        Configure<AbpNavigationOptions>(options =>
269
        {
270
            options.MenuContributors.Add(new MyProjectNameMenuContributor());
271
        });
272
    }
273

274
    private void ConfigureAutoApiControllers()
275
    {
276
        Configure<AbpAspNetCoreMvcOptions>(options =>
277
        {
278
            options.ConventionalControllers.Create(typeof(MyProjectNameModule).Assembly);
279
        });
280
    }
281

282
    private void ConfigureSwagger(IServiceCollection services)
283
    {
284
        services.AddAbpSwaggerGen(
285
            options =>
286
            {
287
                options.SwaggerDoc("v1", new OpenApiInfo { Title = "MyProjectName API", Version = "v1" });
288
                options.DocInclusionPredicate((docName, description) => true);
289
                options.CustomSchemaIds(type => type.FullName);
290
            }
291
        );
292
    }
293

294
    private void ConfigureAutoMapper(ServiceConfigurationContext context)
295
    {
296
        context.Services.AddAutoMapperObjectMapper<MyProjectNameModule>();
297
        Configure<AbpAutoMapperOptions>(options =>
298
        {
299
            /* Uncomment `validate: true` if you want to enable the Configuration Validation feature.
300
             * See AutoMapper's documentation to learn what it is:
301
             * https://docs.automapper.org/en/stable/Configuration-validation.html
302
             */
303
            options.AddMaps<MyProjectNameModule>(/* validate: true */);
304
        });
305
    }
306

307
    private void ConfigureEfCore(ServiceConfigurationContext context)
308
    {
309
        context.Services.AddAbpDbContext<MyProjectNameDbContext>(options =>
310
        {
311
            /* You can remove "includeAllEntities: true" to create
312
             * default repositories only for aggregate roots
313
             * Documentation: https://docs.abp.io/en/abp/latest/Entity-Framework-Core#add-default-repositories
314
             */
315
            options.AddDefaultRepositories(includeAllEntities: true);
316
        });
317

318
        Configure<AbpDbContextOptions>(options =>
319
        {
320
            options.Configure(configurationContext =>
321
            {
322
                configurationContext.UseSqlServer();
323
            });
324
        });
325

326
        //<TEMPLATE-REMOVE IF-NOT='dbms:SQLite'>
327
        Configure<AbpUnitOfWorkDefaultOptions>(options =>
328
        {
329
            options.TransactionBehavior = UnitOfWorkTransactionBehavior.Disabled;
330
        });
331
        //</TEMPLATE-REMOVE>
332
    }
333

334
    public override void OnApplicationInitialization(ApplicationInitializationContext context)
335
    {
336
        var app = context.GetApplicationBuilder();
337
        var env = context.GetEnvironment();
338

339
        if (env.IsDevelopment())
340
        {
341
            app.UseDeveloperExceptionPage();
342
        }
343

344
        app.UseAbpRequestLocalization();
345

346
        if (!env.IsDevelopment())
347
        {
348
            app.UseErrorPage();
349
        }
350

351
        app.UseCorrelationId();
352
        app.UseStaticFiles();
353
        app.UseRouting();
354
        app.UseAuthentication();
355
        app.UseAbpOpenIddictValidation();
356

357
        if (IsMultiTenant)
358
        {
359
            app.UseMultiTenancy();
360
        }
361

362
        app.UseUnitOfWork();
363
        app.UseDynamicClaims();
364
        app.UseAuthorization();
365

366
        app.UseSwagger();
367
        app.UseAbpSwaggerUI(options =>
368
        {
369
            options.SwaggerEndpoint("/swagger/v1/swagger.json", "MyProjectName API");
370
        });
371

372
        app.UseAuditing();
373
        app.UseAbpSerilogEnrichers();
374
        app.UseConfiguredEndpoints();
375
    }
376
}
377

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.