.NET Core之 ABP从入门到精通
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
类中配置中间件的代码,我们把Statup
中Configure
方法中的中间件全部写到了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
可以看到Pre
和Post
这类方法,只要带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从入门到精通相关推荐
- ABP从入门到精通(4):使用基于JWT标准的Token访问WebApi
项目:asp.net zero 4.2.0 .net core(1.1) 版本 我们做项目的时候可能会遇到需要提供api给app调用,ABP动态生成的WebApi提供了方便的基于JWT标准的Token ...
- ABP从入门到精通(3):aspnet-zero-core 使用Redis缓存
一.Redis是什么? redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset ...
- ABP从入门到精通(2):aspnet-zero-core 使用MySql数据库
关于 asp.net zero core 项目的启动及说明,请观看我前面的博文ABP从入门到精通(1):aspnet-zero-core项目启动及各项目源码说明 本操作对于ABP默认项目应该也是适用的 ...
- ABP从入门到精通(5):.扩展国际化语言资源
ABP的有些组件使用的该组件自带的语言包资源,所以在有些时候会因为我们当前使用的语言对应的语言包不全,而造成日志一直记录WARN.ABP给我们提供了扩展语言包资源的接口,可以解决这个问题. 以下示例代 ...
- ABP从入门到精通(1):aspnet-zero-core项目启动及各项目源码说明
一.ABP的简单介绍 ABP是"ASP.NET Boilerplate Project (ASP.NET样板项目)"的简称. ASP.NET Boilerplate是一个用最佳实践 ...
- 使用 ASP.NET Core, Entity Framework Core 和 ABP 创建N层Web应用 第二篇
介绍 这是"使用 ASP.NET Core ,Entity Framework Core 和 ASP.NET Boilerplate 创建N层 Web 应用"系列文章的第二篇.以下 ...
- ASP.NET Core MVC从入门到精通[PDF版]
随着技术的发展,ASP.NET Core MVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容,适用 ...
- meteor从入门到精通_我已经大规模运行Meteor一年了。 这就是我所学到的。
meteor从入门到精通 by Elie Steinbock 埃莉·斯坦博克(Elie Steinbock) 我已经大规模运行Meteor一年了. 这就是我所学到的. (I've been runni ...
- ASP.NET MVC入门到精通——Spring.net-业务层仓储
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 上一节,我们已经把项目框架的雏形搭建好了,那么现在我来开始业务实现,在业务实现的过程当中,不断的来完善我们现有的框架. 1.假设我们来做一个 ...
最新文章
- 偶遇mysql(Percona Server)的一个新bug
- 数据结构之顺序表(一)
- Cocos2d-x 3.x如何通过WebSocket连接服务器进行数据传输
- vba ado返回集合_利用VBA代码导出工作表中的图片
- SVM中的一些关键点解析
- vim学习 08——搜索替换
- luajit lua文件加密工具
- Java Map是否有序
- [hdu3873] Invade the Mars
- 2021湖北省副高考试成绩查询,2021年湖北省教育考试院成绩查询登录入口
- 数据库异常:FUNCTION count does not exist.
- Android studio 简易流式布局
- Cisco服务器硬盘状态jbod,如何为服务器硬盘配置RAID或JBOD模式
- yolo 深度学习_YoLo v1-v3深度学习网络-结构简介
- JAVA 油站管理系统_基于JAVA的全国加油站[实时油价]接口调用代码实例
- 【附源码】计算机毕业设计java游泳馆管理系统设计与实现
- *【思路】程序员怎么快速接手一个项目
- openstack的osd,up不起来原因【重建osd日志盘软连接方法】
- 单片机:看门狗程序简介
- (图)Eee PC 904 HD闪亮登场!