zoukankan      html  css  js  c++  java
  • 【abp vnext 实战系列】简单的内容管理系统:搭建框架

     PS:中文文档地址

    1- 生成项目的方式

    1.1- 模板生成地址 

      https://abp.io/get-started

    1.2-abp cli 命令生成

       https://docs.abp.io/zh-Hans/abp/latest/Getting-Started?UI=MVC&DB=EF&Tiered=No

     2-项目结构

     PS:我是纯手工制作,从空白模板开始的

    2.1-结构如下

    PS:我不打算用动态API 所以结构做了删减

    •  GR.CMS.Domain.Shared 

               我需要审计日志和后台任务功能,所以添加如下引用

               Volo.Abp.Validation,

              Volo.Abp.AuditLogging.Domain.Shared,

              Volo.Abp.BackgroundJobs.Domain.Shared

               

     1 [DependsOn(
     2           typeof(AbpAuditLoggingDomainSharedModule),
     3           typeof(AbpBackgroundJobsDomainSharedModule)
     4           )]
     5     public class CMSDomainSharedModule : AbpModule
     6     {
     7         public override void PreConfigureServices(ServiceConfigurationContext context)
     8         {
     9             CMSGlobalFeatureConfigurator.Configure();
    10             CMSModuleExtensionConfigurator.Configure();
    11         }
    12 
    13         public override void ConfigureServices(ServiceConfigurationContext context)
    14         {
    15             Configure<AbpVirtualFileSystemOptions>(options =>
    16             {
    17                 options.FileSets.AddEmbedded<CMSDomainSharedModule>();
    18             });
    19 
    20             Configure<AbpLocalizationOptions>(options =>
    21             {
    22                 options.Resources
    23                     .Add<CMSResource>("en")
    24                     .AddBaseTypes(typeof(AbpValidationResource))
    25                     .AddVirtualJson("/Localization/CMS");
    26 
    27                 options.DefaultResourceType = typeof(CMSResource);
    28             });
    29 
    30             Configure<AbpExceptionLocalizationOptions>(options =>
    31             {
    32                 options.MapCodeNamespace("CMS", typeof(CMSResource));
    33             });
    34         }
    35     }
    CMSDomainSharedModule

               其他类都是照着生成的DEMO 扣的

    • GR.CMS.Domain

              添加如下引用

               GR.CMS.Domain.Shared ,

               Volo.Abp.AuditLogging.Domain,

               Volo.Abp.BackgroundJobs.Domain

            

     PS:暂时我不太想要多租户,所以注释了相关配置

     1 [DependsOn(
     2           typeof(CMSDomainSharedModule),
     3           typeof(AbpAuditLoggingDomainModule),
     4           typeof(AbpBackgroundJobsDomainModule)
     5           )]
     6     public class CMSDomainModule : AbpModule
     7     {
     8         public override void ConfigureServices(ServiceConfigurationContext context)
     9         {
    10             //Configure<AbpMultiTenancyOptions>(options =>
    11             //{
    12             //    options.IsEnabled = MultiTenancyConsts.IsEnabled;
    13             //});
    14 
    15 #if DEBUG
    16             //context.Services.Replace(ServiceDescriptor.Singleton<IEmailSender, NullEmailSender>());
    17 #endif
    18         }
    19     }
    • GR.CMS.Application.Contracts

              添加如下引用

               GR.CMS.Domain.Shared ,

    1     [DependsOn(
    2              typeof(CMSDomainSharedModule)
    3              )]
    4     public class CMSApplicationContractsModule : AbpModule
    5     {
    6     }
    • GR.CMS.Application

            添加如下引用

               GR.CMS.Domain.Shared ,

              GR.CMS.Application.Contracts

    1 [DependsOn(
    2              typeof(CMSApplicationContractsModule),
    3              typeof(CMSDomainModule)
    4              )]
    5     public class CMSApplicationModule : AbpModule
    6     {
    7     }
    • GR.CMS.EntityFrameworkCore

         添加如下引用

               GR.CMS.Domain,

             Volo.Abp.EntityFrameworkCore.MySQL,

             Volo.Abp.AuditLogging.EntityFrameworkCore,

              Volo.Abp.BackgroundJobs.EntityFrameworkCore

     1 [DependsOn(
     2           typeof(CMSDomainModule), 
     3           typeof(AbpEntityFrameworkCoreMySQLModule),
     4           typeof(AbpAuditLoggingEntityFrameworkCoreModule),
     5           typeof(AbpBackgroundJobsEntityFrameworkCoreModule)
     6           )]
     7     public class CMSEntityFrameworkCoreModule : AbpModule
     8     {
     9         public override void PreConfigureServices(ServiceConfigurationContext context)
    10         {
    11             CMSEfCoreEntityExtensionMappings.Configure();
    12         }
    13 
    14         public override void ConfigureServices(ServiceConfigurationContext context)
    15         {
    16             context.Services.AddAbpDbContext<CMSDbContext>(options =>
    17             {
    18                 /* Remove "includeAllEntities: true" to create
    19                  * default repositories only for aggregate roots */
    20                 options.AddDefaultRepositories(includeAllEntities: true);
    21             });
    22 
    23             Configure<AbpDbContextOptions>(options =>
    24             {
    25                 /* The main point to change your DBMS.
    26                  * See also CMSMigrationsDbContextFactory for EF Core tooling. */
    27                 options.UseMySQL();
    28             });
    29         }
    30     }
    CMSEntityFrameworkCoreModule
    • GR.CMS.Web

       添加如下引用

               GR.CMS.Application,

               GR.CMS.EntityFrameworkCore,

              Volo.Abp.AspNetCore.Mvc,

              Volo.Abp.Autofac,

              Volo.Abp.BackgroundJobs.EntityFrameworkCore,

              Serilog.AspNetCore,

              Serilog.Sinks.Async,

              Volo.Abp.AspNetCore.Serilog

      1 [DependsOn(
      2         typeof(CMSApplicationModule),
      3         typeof(CMSEntityFrameworkCoreModule),
      4         typeof(AbpAspNetCoreMvcModule),
      5         typeof(AbpAutofacModule))]
      6     public class CMSWebModule : AbpModule
      7     {
      8         public override void PreConfigureServices(ServiceConfigurationContext context)
      9         {
     10             context.Services.PreConfigure<AbpMvcDataAnnotationsLocalizationOptions>(options =>
     11             {
     12                 options.AddAssemblyResource(
     13                     typeof(CMSResource),
     14                     typeof(CMSDomainModule).Assembly,
     15                     typeof(CMSDomainSharedModule).Assembly,
     16                     typeof(CMSApplicationModule).Assembly,
     17                     typeof(CMSApplicationContractsModule).Assembly,
     18                     typeof(CMSWebModule).Assembly
     19                 );
     20             });
     21         }
     22 
     23         public override void ConfigureServices(ServiceConfigurationContext context)
     24         {
     25             var hostingEnvironment = context.Services.GetHostingEnvironment();
     26             var configuration = context.Services.GetConfiguration();
     27 
     28             ConfigureUrls(configuration);
     29              
     30             ConfigureAutoMapper();
     31             ConfigureVirtualFileSystem(hostingEnvironment);
     32             ConfigureLocalizationServices();
     33              
     34             ConfigureAutoApiControllers();
     35              
     36         }
     37 
     38         private void ConfigureUrls(IConfiguration configuration)
     39         {
     40             Configure<AppUrlOptions>(options =>
     41             {
     42                 options.Applications["MVC"].RootUrl = configuration["App:SelfUrl"];
     43             });
     44         }
     45 
     46         
     47 
     48         private void ConfigureAutoMapper()
     49         {
     50             Configure<AbpAutoMapperOptions>(options =>
     51             {
     52                 options.AddMaps<CMSWebModule>();
     53             });
     54         }
     55 
     56         private void ConfigureVirtualFileSystem(IWebHostEnvironment hostingEnvironment)
     57         {
     58             if (hostingEnvironment.IsDevelopment())
     59             {
     60                 Configure<AbpVirtualFileSystemOptions>(options =>
     61                 {
     62                     options.FileSets.ReplaceEmbeddedByPhysical<CMSDomainSharedModule>(Path.Combine(hostingEnvironment.ContentRootPath, $"..{Path.DirectorySeparatorChar}GR.CMS.Domain.Shared"));
     63                     options.FileSets.ReplaceEmbeddedByPhysical<CMSDomainModule>(Path.Combine(hostingEnvironment.ContentRootPath, $"..{Path.DirectorySeparatorChar}GR.CMS.Domain"));
     64                     options.FileSets.ReplaceEmbeddedByPhysical<CMSApplicationContractsModule>(Path.Combine(hostingEnvironment.ContentRootPath, $"..{Path.DirectorySeparatorChar}GR.CMS.Application.Contracts"));
     65                     options.FileSets.ReplaceEmbeddedByPhysical<CMSApplicationModule>(Path.Combine(hostingEnvironment.ContentRootPath, $"..{Path.DirectorySeparatorChar}GR.CMS.Application"));
     66                     options.FileSets.ReplaceEmbeddedByPhysical<CMSWebModule>(hostingEnvironment.ContentRootPath);
     67                 });
     68             }
     69         }
     70 
     71         private void ConfigureLocalizationServices()
     72         {
     73             Configure<AbpLocalizationOptions>(options =>
     74             {
     75                 options.Languages.Add(new LanguageInfo("en", "en", "English"));  
     76                 options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文"));
     77                 options.Languages.Add(new LanguageInfo("zh-Hant", "zh-Hant", "繁體中文"));
     78             });
     79         }
     80 
     81        
     82 
     83         private void ConfigureAutoApiControllers()
     84         {
     85             Configure<AbpAspNetCoreMvcOptions>(options =>
     86             {
     87                 options.ConventionalControllers.Create(typeof(CMSApplicationModule).Assembly);
     88             });
     89         }
     90 
     91         
     92 
     93         public override void OnApplicationInitialization(ApplicationInitializationContext context)
     94         {
     95             var app = context.GetApplicationBuilder();
     96             var env = context.GetEnvironment();
     97 
     98             if (env.IsDevelopment())
     99             {
    100                 app.UseDeveloperExceptionPage();
    101             }
    102 
    103             app.UseAbpRequestLocalization();
    104 
    105            
    106             app.UseCorrelationId();
    107             app.UseStaticFiles();
    108             app.UseRouting();
    109             app.UseAuthentication();
    110            
    111             app.UseUnitOfWork();
    112             
    113             app.UseAuthorization();
    114              
    115             app.UseAuditing();
    116             app.UseAbpSerilogEnrichers();
    117             app.UseConfiguredEndpoints();
    118         }
    119     }
    CMSWebModule

    PS:  这样子,基本的架子就搭建成功了,然后运行的时候因为没有生成相关数据库,所以会有错误日志输出

    PS:文档地址

    漫漫人生,唯有激流勇进,不畏艰险,奋力拼搏,方能中流击水,抵达光明的彼岸
  • 相关阅读:
    植物-常见植物:苍耳草
    Linux 服务的加入删除,自己主动执行及状态
    HTML标签列表
    cocos2d js ClippingNode 制作标题闪亮特效
    被AppStore拒绝理由(一)
    開始学习hadoop
    改动mysqlpassword
    hdu 1874 畅通project续
    发现百度开源一个好东西,Echarts统计报表前段框架
    一个基于cocos2d-x 3.0和Box2d的demo小程序
  • 原文地址:https://www.cnblogs.com/ganqiyin/p/13819141.html
Copyright © 2011-2022 走看看