abp因為是模塊化框架,所以需要使用哪個模塊,再從nuget上引用即可。
ABP官網:https://abp.io/
一、控制台示例
首先創建一個控制台項目,基於net core 3.1 ,引入 Volo.Abp.Core 核心庫,abp更新很快,要注意看版本兼容。

ABP有一個啟動模塊AbpModule,我們每個項目都必須要有一個啟動模塊,也僅需一個啟動模塊, 來繼承AbpModule 。在啟動模塊中可以做一些注入
namespace HelloAbp { public class HelloAbpModule:AbpModule { } }
比如,例子中我創建了一個空的啟動模塊。
然后我們再創建一個服務類HelloWorldService,來處理我們的業務邏輯。例子中定義一個Run方法,輸出hello world。
using System; using Volo.Abp.DependencyInjection; namespace HelloAbp { public class HelloWorldService:IScopedDependency { public void Run() { Console.WriteLine("hello world"); } } }
這里大家會看到HelloWorldService繼承了IScopedDependency,這是ABP依賴注入的一種方式。提供了3種方式,分別對應我們依賴注入的3種方式
IScopedDependency:對應Scoped 生命周期
ITransientDependency:對應Transient生命周期,瞬時。
ISingletonDependency:對應Singleton生命周期,單例
只需要繼承對應的接口,即可 以對應的生命周期方式自動注入。很方便。
我們啟動模塊也創建了,服務也有了,那怎么連起來調用呢?
看示例:
using Microsoft.Extensions.DependencyInjection; using Volo.Abp; namespace HelloAbp { class Program { static void Main(string[] args) { var application = AbpApplicationFactory.Create<HelloAbpModule>(); //加載啟動模塊 application.Initialize(); //啟動模塊初始化 var service = application.ServiceProvider.GetService<HelloWorldService>(); //利用啟動模塊,獲取服務 service.Run(); //執行服務定義的方法 } } }
首先,我們必須把啟動模塊初始化起來,然后利用啟動模塊,來加載服務。這樣就可以調用服務里面的方法了。看執行情況:

輸出了方法體中的內容。這樣我們就實現了控制台中簡單的使用方式。
以往,我們依賴注入大部分都是利用接口來注入的,那在這里,如果用接口,我們又如何使用呢?其實是一樣的,我直接貼代碼:
namespace HelloAbp { public interface IHelloWorldService { void Run(); } }
定義一個接口服務類。
using Microsoft.Extensions.DependencyInjection; using System; using Volo.Abp.DependencyInjection; namespace HelloAbp { public class HelloWorldService:IScopedDependency,IHelloWorldService { public void Run() { Console.WriteLine("hello world"); } } }
繼承接口。
using Microsoft.Extensions.DependencyInjection; using Volo.Abp; namespace HelloAbp { class Program { static void Main(string[] args) { var application = AbpApplicationFactory.Create<HelloAbpModule>(); //加載啟動模塊 application.Initialize(); //啟動模塊初始化 var service = application.ServiceProvider.GetService<IHelloWorldService>(); //利用啟動模塊,獲取服務 service.Run(); //執行服務定義的方法 } } }
在獲取服務時,采用接口類型。這樣也是得到一樣的結果。
當然對於我們開發來說,正常都是使用接口來處理,這也正是依賴注入的重要作用。
這樣,一個完整的控制台依賴注入的示例就好了。
二、那在於我們的net core MVC項目中,又要如何處理呢
首先創建一個 netcore 3.1版本的MVC項目

nuget引用以上2個包,其中core是核心庫。MVC項目必須引用MVC庫。同樣要注意版本兼容問題。
一樣的,MVC庫也需要創建一個啟動模塊,來繼承AbpModule。
using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.Hosting; using Volo.Abp; using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.Modularity; namespace WebApplication1.Models { [DependsOn(typeof(AbpAspNetCoreMvcModule))] //必須依賴 public class AppModule:AbpModule { /// <summary> /// 在啟動模塊初始化中,我們就可以把startup中的配置都搬過來 /// </summary> /// <param name="context"></param> public override void OnApplicationInitialization(ApplicationInitializationContext context) { var app = context.GetApplicationBuilder(); var env = context.GetEnvironment(); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); } app.UseRouting(); app.UseConfiguredEndpoints(); //使用ABP的路由總結點 } } }
創建啟動項之后,當然就是添加到配置服務里面了,以及初始化了,在startup中操作,看代碼:
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.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(); //初始化啟動模塊 } }
OK,這樣子,我們就完成了基本操作了。下面開始應用了
先創建一個IUserService接口和一個UserService服務,代碼分別如下:
namespace WebApplication1.Models { public interface IUserService { string GetName(); } }
using Volo.Abp.DependencyInjection; namespace WebApplication1.Models { public class UserService : IUserService, IScopedDependency { public string GetName() { return "張三"; } } }
接着控制器中使用
using Microsoft.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc; using WebApplication1.Models; namespace WebApplication1.Controllers { public class HomeController : AbpController //控制器必須繼承 AbpController { private readonly IUserService _userService; public HomeController(IUserService userService) { _userService = userService; } public IActionResult Index() { return Content(_userService.GetName()); } } }
啟動項目,瀏覽

這樣,調用就成功了。我們就完成了mvc中的基本使用了。
本章結束。
示例代碼地址:https://gitee.com/fei686868/abpvnext-learning-shili
