abp框架java,【Net】ABP框架学习之正面硬钢
前言
本文介紹另一種學習ABP框架的方法,該方法為正面硬鋼學習法。。。
我們不去官網下載模板,直接引用DLL,直接使用。
WebApi項目創建
首先創建一個WebApi項目,結構如下。
然后Nuget搜索ABP,安裝ABP框架。(我這里安裝的是5.1.0,因為最高版本安裝不上)
在安裝ABP前先檢查當前安裝的Microsoft.AspNet.WebApi版本,因為ABP5.1.0依賴的是WebApi的5.2.7,如果WebApi不是5.2.7,在Nuget包管理—程序包管理器控制臺中輸入Update-Package Microsoft.AspNet.WebApi -Version 5.2.7來升級一下。(Get-Package查看已安裝包的信息)
然后修改Global.asax,修改代碼如下:
using Abp.Web;
using ABPWebApi;
using System;
using System.Web;
[assembly: PreApplicationStartMethod(typeof(PreStarter), "Start")]
namespace ABPWebApi
{
public class WebApiApplication : Abp.Web.AbpWebApplication
{
protected override void Application_Start(object sender, EventArgs e)
{
base.Application_Start(sender, e);
}
}
public static class PreStarter
{
public static void Start()
{ //WebApiApplication.AbpBootstrapper.PlugInSources.AddToBuildManager();
}
}
}
這里WebApiApplication不再繼承System.Web.HttpApplication,改為繼承ABP框架下的Abp.Web.AbpWebApplication;因此原生框架提供的Application_Start不再需要,代碼里重寫了ABP的Application_Start,這樣我們就找到了Application_Start,可以在啟動時做自己想做的事情了。
AbpWebApplication是個泛型,要求指定默認啟動模塊的類,這里我們先寫上SdudentApiServiceModule,下面會創建這個類。
在Global中,還使用PreApplicationStartMethod做了一些啟動預處理,比如加載一些插件,當然也可以什么都不做。
如果要加載插件或者做一些其他操作,則需要再引入ABP.WEB,因為一些配置的依賴庫在這里,這里同樣引用5.1.0版本。
因為使用了ABP框架,所以我們不再需要微軟提供的默認布局了,下面我們微軟的默認布局文件夾刪除;如下圖:
現在我們新建一個類庫,創建一個SdudentApi模塊,用來編寫可以被HTTP訪問的接口。
創建完類庫后,我們需要在類庫里添加一個自定義類,來標記,這個類庫是WebApi服務模塊。
創建SdudentApiServiceModule類,并繼承AbpModule。
很明顯AbpModule在SdudentApi類庫是未被引用的,所以我們要引用一下ABP的框架。
因為這個模塊是WebApi,所以我們直接引用Abp.Web.Api5.1.0就可以了。(由于Abp.Web.Api依賴于Abp,所以Abp也會被同時引入)
現在我們編輯SdudentApiServiceModule類。
因為繼承了AbpModule,所以我們可以override它PreInitialize,Initialize,PostInitialize,Shutdown;它們分別是模塊初始化前,中,后和關閉。(只有被加載和關閉時調用這些方法,調用API方法時,這些不觸發)
下面我們編寫下SdudentApiServiceModule,代碼如下:
[DependsOn(typeof(Abp.WebApi.AbpWebApiModule))]
public class SdudentApiServiceModule : AbpModule
{
public override void PreInitialize()
{
Configuration.Modules.AbpWeb().AntiForgery.IsEnabled = false;
Configuration.Modules.AbpWebCommon().SendAllExceptionsToClients = true;
}
public override void Initialize()
{
//按照約定,ABP自動注冊所有 Repositories, Domain Services, Application Services, MVC 控制器和Web API控制器
//ABP按照約定注冊程序集,下面代碼將告訴ABP要注冊當前程序集。
IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
//動態ApiController創建需要在將當前程序集注冊進ABP后,才可以調用
//WebApi訪問路徑默認前綴api/services,Sdudent是我們追加的前綴,可以自定義,例如Sdudent/Task
//外放成ApiController的服務需要繼承ABP的IApplicationService接口,需要準守命名約定,這樣才能被搜索到(服務命名約定:服務名+AppService,例如SearchSdudentAppService)
Configuration.Modules.AbpWebApi().DynamicApiControllerBuilder
.ForAll(Assembly.GetAssembly(typeof(SdudentApiServiceModule)), "Sdudent").Build();
}
public override void PostInitialize()
{
}
public override void Shutdown()
{
}
}
首先我們為SdudentApiServiceModule添加依賴[DependsOn(typeof(Abp.WebApi.AbpWebApiModule))],這是因為,ABP都是通過Castle進行依賴控制反轉實例化對象的,所以,在實例化SdudentApiServiceModule時,如果它依賴的類沒有被裝載,它就會報錯,因為我們在寫WebApi,所以很明顯,我們依賴Abp.WebApi.AbpWebApiModule這個模塊。
PreInitialize:這里我們Http請求的簡單配置,還可以繼續配置,ABP配置很多。
Initialize:這里將當前類裝載進ABP,同時動態創建了ApiController。
PostInitialize和Shutdown暫時無操作。
現在我們創建服務(它們將被轉換成ApiController)。
創建接口ISearchSdudentAppService,代碼如下:
public interface ISearchSdudentAppService : IApplicationService
{
[HttpGet]
string GetSdudent();
}
注意接口方法需要加[HttpGet],不加的會被默認注冊為Post,測試時會出現無法訪問的問題。
創建服務SearchSdudentAppService,代碼如下:
public class SearchSdudentAppService: ISearchSdudentAppService
{
public string GetSdudent()
{
return "I am a Sdudent";
}
}
SdudentApiServiceModule編寫完成,現在我們運行項目測試一下。
如上圖,訪問成功。
Url解析:這里我們訪問的URL是/api/services/Sdudent/SearchSdudent/GetSdudent。
其中/api/services是默認前綴,Sdudent/是我們自定義前綴,SearchSdudent是Controler名,它是根據服務名來的,服務名減去約定名(SearchSdudentAppService-AppService),GetSdudent是Action名,就是服務里的方法名。
跨域配置
Nuget搜索Microsoft.AspNet.WebApi.Cors,安裝與Microsoft.AspNet.WebApi相同版本號的Cors。
SdudentApiServiceModule模塊的PreInitialize方法里追加配置。
var cors = new EnableCorsAttribute("*", "*", "*");
GlobalConfiguration.Configuration.EnableCors(cors);
Filter配置
在SdudentApiServiceModule模塊創建ExceptionFilter類,代碼如下:
public class ExceptionFilter : IExceptionFilter, ITransientDependency
{
public bool AllowMultiple => true;
public async Task ExecuteExceptionFilterAsync(HttpActionExecutedContext actionExecutedContext, CancellationToken cancellationToken)
{
await Task.Run(()=>
{
?
if (actionExecutedContext == null)
{
?
return;
}
if (actionExecutedContext.Exception == null)
{
return;
}
//記錄actionExecutedContext.Exception
});
}
}
在SdudentApiServiceModule類的PostInitialize里配置Fliter。
public override void PostInitialize()
{
GlobalConfiguration.Configuration.Filters.Add(new ExceptionFilter());
}
模塊依賴
依照上文,在創建一個TeacherApi模塊,然后修改Global的啟動模塊為TeacherApiServiceModule,然后引入SdudentApi項目。
然后編寫TeacherApiServiceModule代碼如下:
[DependsOn(typeof(Abp.WebApi.AbpWebApiModule), typeof(SdudentApiServiceModule))]
public class TeacherApiServiceModule : AbpModule
{
private readonly SdudentApiServiceModule _SdudentApiServiceModule;
public TeacherApiServiceModule(SdudentApiServiceModule sdudentApiServiceModule)
{
_SdudentApiServiceModule = sdudentApiServiceModule;
}
public override void PreInitialize()
{
Configuration.Modules.AbpWeb().AntiForgery.IsEnabled = false;
Configuration.Modules.AbpWebCommon().SendAllExceptionsToClients = true;
}
public override void Initialize()
{
IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
Configuration.Modules.AbpWebApi().DynamicApiControllerBuilder
.ForAll(Assembly.GetAssembly(typeof(TeacherApiServiceModule)), "Sdudent").Build();
}
public override void PostInitialize()
{
var ret =_SdudentApiServiceModule.GetSdudent();
Console.WriteLine(ret);
}
public override void Shutdown()
{
}
}
如上代碼所示,我們在DependsOn上追加SdudentApiServiceModule依賴,然后在TeacherApiServiceModule的構造函數里,使用SdudentApiServiceModule類型參數,然后運行時參數就會被實例化,并注入進來。
現在我們訪問TeacherApi的訪問,把TeacherApiServiceModule模塊調用起來,看下模塊的PostInitialize里,是否成功調用了SdudentApiServiceModule模塊的方法。
如上圖,依賴調用成功。
Swagger配置
Nuget搜索Swashbuckle.core。
模塊下添加函數
private void ConfigureSwaggerUi()
{
Configuration.Modules.AbpWebApi().HttpConfiguration
.EnableSwagger(c =>
{
c.SingleApiVersion("v1", "文檔");
c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());
})
.EnableSwaggerUi();
}
然后在Initialize()里調用該函數,配置完成。
然后運行項目,輸入swagger/ui/index,如下圖:
代碼已經傳到Github上了,歡迎大家下載。
----------------------------------------------------------------------------------------------------
注:此文章為原創,任何形式的轉載都請聯系作者獲得授權并注明出處!
若您覺得這篇文章還不錯,請點擊下方的【推薦】,非常感謝!
關于找一找教程網
本站文章僅代表作者觀點,不代表本站立場,所有文章非營利性免費分享。
本站提供了軟件編程、網站開發技術、服務器運維、人工智能等等IT技術文章,希望廣大程序員努力學習,讓我們用科技改變世界。
[【Net】ABP框架學習之正面硬鋼]http://www.zyiz.net/tech/detail-124762.html
總結
以上是生活随笔為你收集整理的abp框架java,【Net】ABP框架学习之正面硬钢的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小米12首测:GPU性能暴涨52% 功耗
- 下一篇: 全新特斯拉Model 3被曝使用三年前电