ABP是一套基于WEB的快速开发引用框架,和DDD领域驱动开发有很好的结合。
主要特性:模块化,多租户,认证授权,虚拟文件系统,主题系统,后台作业,事件总线,对象映射,依赖注入,数据过滤等。
接下来用代码的方式介绍ABP框架的使用。

一.VS创建一个ABP控制台程序打出Hello word!

1.首先引入框架包

Nuget中安装volo.abp.core
2.创建模块
所谓的ABP模块在代码中体现就是类,我们创建一个HelloABPModule的类,然后引入using Volo.Abp.Modularity;

using Volo.Abp.Modularity;namespace HelloABP
{public class HelloABPModule:AbpModule{}
}

这样就创建好了一个最简单的ABP模块。模块一般不写业务逻辑。

3.我们创建一个服务
创建一个HelloWorldService用于书写业务逻辑。

using Volo.Abp.DependencyInjection;namespace HelloABP
{public class HelloWorldService:ITransientDependency{public void Run() {Console.WriteLine("Hello world!");}}
}

ABP可以按照约定去实现自己的依赖注入,也可以通过接口的形式去实现注入。我们引入using Volo.Abp.DependencyInjection;然后继承ITransientDependency这样我们就用注入了周期为瞬时的HelloWorldService进入了我们IOC容器。

手动注入服务
上面是自动注入服务的方式,接着看下手动注入的方式,手动注入服务的方式和我们直接在Statup中注入是一样的。


using Volo.Abp.Modularity;
//添加注入服务
using Microsoft.Extensions.DependencyInjection;namespace HelloABP
{public class HelloABPModule:AbpModule{public override void ConfigureServices(ServiceConfigurationContext context){context.Services.AddTransient<HelloWorldService>();}}
}

我们在HelloABPModule启动模块类进行注入就行,注入方式和原生注入一样。

4.使用
在MAIN方法中创建启动模块。

using System;
using Volo.Abp;
using Microsoft.Extensions.DependencyInjection;
namespace HelloABP
{class Program{static void Main(string[] args){//创建启动模块,一般一个项目只有一个启动模块,var application = AbpApplicationFactory.Create<HelloABPModule>();//初始化application.Initialize();//调用服务var service = application.ServiceProvider.GetService<HelloWorldService>();service.Run();}}
}

这样一个最简单的ABP应用就跑起来了。

二.创建一个ASP.Net Core应用。

1.安装依赖包

abp.aspnetcore.mvc该包已经包含了第一部分的基础包,如果做WEB开发,安装这一个包就够了。


![在这里插入图片描述](https://img-blog.csdnimg.cn/97546ce9f411454187db272c9e204f8a.jpeg
2.创建应用启动模块
配置启动中间件管道,因为用了ABP进行项目启动,就不需要再用Statup类进行中间件配置了。
我们创建一个ABP模块类APPModule代码如下:

using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Hosting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.Modularity;namespace WebApplication1
{//DependsOn注解可以定义在类和方法上,意思是我这个组件要依赖于另一个组件,也就是说被依赖的组件会比该组件先注册到IOC容器中。[DependsOn(typeof(AbpAspNetCoreMvcModule))]public class APPModule:AbpModule{public override void OnApplicationInitialization(ApplicationInitializationContext context){// 直接从根容器获取     //等同于Statup类Configure方法中的参数一var app = context.GetApplicationBuilder();//等同于Statup类Configure方法中的参数二var env = context.GetEnvironment();if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}else{app.UseExceptionHandler("/Error");app.UseHsts();}app.UseHttpsRedirection();app.UseStaticFiles();app.UseRouting();app.UseAuthorization();app.UseEndpoints(endpoints =>{endpoints.MapRazorPages();});}}
}

上面大部分代码都是Statup类中配置中间件的代码,我们把StatupConfigure方法中的中间件全部写到了ABP启动模块中,原来的Configure只需要写启动模块的初始化代码就行了。

3.注入ABP启动模块和初始化
打开Statup类,代码如下:

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;namespace WebApplication1
{public class Startup{public Startup(IConfiguration configuration){Configuration = configuration;}public IConfiguration Configuration { get; }// This method gets called by the runtime. Use this method to add services to the container.public void ConfigureServices(IServiceCollection services){services.AddRazorPages();//注入ABP模块services.AddApplication<APPModule>();}// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.public void Configure(IApplicationBuilder app, IWebHostEnvironment env){//初始化模块app.InitializeApplication();}}
}

这2句注释的代码,和标题一中的控制台程序Mian方法的代码是一个意思,先注入服务,再初始化。这样我们就配置好了web应用的APB配置。接下来的业务操作,和控制台都是一样的了。

4.在ABP中使用控制器
创建一个控制器,代码如下:

using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp.AspNetCore.Mvc;namespace WebApplication1.Controllers
{//需要继承ABP的控制器public class HellloController:AbpController{public IActionResult Index() {return Content("Hello world");}}
}

并且需要把APPModule终结点的配置换成默认的,代码如下:

            //app.UseEndpoints(endpoints =>//{//    endpoints.MapRazorPages();//});//配置为默认app.UseConfiguredEndpoints();

这样我们就可以用ABP访问控制器了。

三.模块的生命周期。

ABP模块生命周期就三步:配置,初始化,销毁。
配置分为配置前,和配置后。
我们点进去AbpModule可以看到PrePost这类方法,只要带Pre的就是操作之前的,Post为该方法操作之后的。
服务配置前

  public virtual void PreConfigureServices(ServiceConfigurationContext context);

配置之后

  public virtual void PostConfigureServices(ServiceConfigurationContext context);

初始化

 public virtual void OnApplicationInitialization(ApplicationInitializationContext context);

程序结束做的事情

 public virtual void OnApplicationShutdown(ApplicationShutdownContext context);

上面都是虚方法,自己有需要的业务可以重写。

四.ABP模块中的预配置选项。

预配置作用,就是在你做配置之前使用的。
首先创建一个MyModulePreOptions类,

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace HelloABP
{public class MyModulePreOptions{public bool IsEnable { get; set; }public string Name { get; set; }}
}

然后我们在ABP模块中进行选项预配置,直接上代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Modularity;
//添加注入服务
using Microsoft.Extensions.DependencyInjection;namespace HelloABP
{public class HelloABPModule:AbpModule{public override void PreConfigureServices(ServiceConfigurationContext context){PreConfigure<MyModulePreOptions>(options=>options.IsEnable=true);}public override void ConfigureServices(ServiceConfigurationContext context){//获取预配置后的信息var preOptions = context.Services.ExecutePreConfiguredActions<MyModulePreOptions>();if (preOptions.IsEnable) {Configure<MyModulePreOptions>(options =>options.Name="Hello Abp");}// context.Services.AddTransient<HelloWorldService>();}}
}

接着调用一下。

using Microsoft.Extensions.Options;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;namespace HelloABP
{public class HelloWorldService:ITransientDependency{private readonly IOptions<MyModulePreOptions> _options;public HelloWorldService(IOptions<MyModulePreOptions> options){_options = options;}public void Run() {Console.WriteLine(_options.Value.Name??"选项未配置");}}
}

结果:

我们可以在预配置环节,对你需要配置的类进行属性初始化,然后我们在启动配置那块,调用你预配置好的类,然后做一些业务处理。

.NET Core之 ABP从入门到精通相关推荐

  1. ABP从入门到精通(4):使用基于JWT标准的Token访问WebApi

    项目:asp.net zero 4.2.0 .net core(1.1) 版本 我们做项目的时候可能会遇到需要提供api给app调用,ABP动态生成的WebApi提供了方便的基于JWT标准的Token ...

  2. ABP从入门到精通(3):aspnet-zero-core 使用Redis缓存

    一.Redis是什么? redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset ...

  3. ABP从入门到精通(2):aspnet-zero-core 使用MySql数据库

    关于 asp.net zero core 项目的启动及说明,请观看我前面的博文ABP从入门到精通(1):aspnet-zero-core项目启动及各项目源码说明 本操作对于ABP默认项目应该也是适用的 ...

  4. ABP从入门到精通(5):.扩展国际化语言资源

    ABP的有些组件使用的该组件自带的语言包资源,所以在有些时候会因为我们当前使用的语言对应的语言包不全,而造成日志一直记录WARN.ABP给我们提供了扩展语言包资源的接口,可以解决这个问题. 以下示例代 ...

  5. ABP从入门到精通(1):aspnet-zero-core项目启动及各项目源码说明

    一.ABP的简单介绍 ABP是"ASP.NET Boilerplate Project (ASP.NET样板项目)"的简称. ASP.NET Boilerplate是一个用最佳实践 ...

  6. 使用 ASP.NET Core, Entity Framework Core 和 ABP 创建N层Web应用 第二篇

    介绍 这是"使用 ASP.NET Core ,Entity Framework Core 和 ASP.NET Boilerplate 创建N层 Web 应用"系列文章的第二篇.以下 ...

  7. ASP.NET Core MVC从入门到精通[PDF版]

    随着技术的发展,ASP.NET Core MVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容,适用 ...

  8. meteor从入门到精通_我已经大规模运行Meteor一年了。 这就是我所学到的。

    meteor从入门到精通 by Elie Steinbock 埃莉·斯坦博克(Elie Steinbock) 我已经大规模运行Meteor一年了. 这就是我所学到的. (I've been runni ...

  9. ASP.NET MVC入门到精通——Spring.net-业务层仓储

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 上一节,我们已经把项目框架的雏形搭建好了,那么现在我来开始业务实现,在业务实现的过程当中,不断的来完善我们现有的框架. 1.假设我们来做一个 ...

最新文章

  1. 偶遇mysql(Percona Server)的一个新bug
  2. 数据结构之顺序表(一)
  3. Cocos2d-x 3.x如何通过WebSocket连接服务器进行数据传输
  4. vba ado返回集合_利用VBA代码导出工作表中的图片
  5. SVM中的一些关键点解析
  6. vim学习 08——搜索替换
  7. luajit lua文件加密工具
  8. Java Map是否有序
  9. [hdu3873] Invade the Mars
  10. 2021湖北省副高考试成绩查询,2021年湖北省教育考试院成绩查询登录入口
  11. 数据库异常:FUNCTION count does not exist.
  12. Android studio 简易流式布局
  13. Cisco服务器硬盘状态jbod,如何为服务器硬盘配置RAID或JBOD模式
  14. yolo 深度学习_YoLo v1-v3深度学习网络-结构简介
  15. JAVA 油站管理系统_基于JAVA的全国加油站[实时油价]接口调用代码实例
  16. 【附源码】计算机毕业设计java游泳馆管理系统设计与实现
  17. *【思路】程序员怎么快速接手一个项目
  18. openstack的osd,up不起来原因【重建osd日志盘软连接方法】
  19. 单片机:看门狗程序简介
  20. (图)Eee PC 904 HD闪亮登场!

热门文章

  1. 2020速卖通开店全流程及新手卖家新店运营思路
  2. 多线程之旅(Task 任务)
  3. dwr3实现消息精准推送详细步骤
  4. 萤石云视频EZOpenSDK的集成与使用
  5. 机器学习笔记 - Siamese Neural Network 孪生神经网络
  6. 【MATLAB编程实战】计算图片的信息熵
  7. 数据解读 | 中国家长快要买不起孩子的暑假了
  8. 微信小程序资料集(中)
  9. FOHEART·X动捕+“虎牙直播”,3分钟搞定虚拟人物直播!
  10. 20160420 每天半小时学英语