【Net】ABP框架學習之它並不那么好用


前言

 上一篇文章介紹了ABP的Web API,本文在繼續介紹ABP的其他內容。

在ABP中,WEBAPI是一個值得用的東西。但其他東西,就不一定是那么好用了。

因為越深入的學習ABP,你就越會發現,它自身有着非常強的設計約束,而而微軟的框架已經有一定的約束了,再使用一套附加約束,顯然會更辛苦。

下面我們看一下ABP的Controller。

創建項目

首先,我們創建一個MVC項目,AbpMvcController。

然后引用Abp.Web.Mvc。

使用了ABP后,必須修改WebApiApplication的繼承類,所以,原來的初始化的路由等等信息,要換個地方寫了,下面我們看看變化。

將WebApiApplication改為繼承Abp.Web.AbpWebApplication;Global.asax修改如下:

using Abp.Web;
using AbpMvcController;
using System;
using System.Web;
[assembly: PreApplicationStartMethod(typeof(PreStarter), "Start")]
namespace AbpMvcController
{
    public class WebApiApplication : Abp.Web.AbpWebApplication<StartServiceModule>
    {
        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(); 
        }
    } 
}

然后在App_Start文件夾新建StartModule,StartModule繼承 AbpModule。

然后把在Global.asa中刪除路由注冊等信息,在StartModule中,重寫出來。

PS:因為創建的是MVC項目,所以我們添加相應的依賴——[DependsOn(typeof(Abp.Web.AbpWebModule),typeof(AbpWebMvcModule))]。

代碼如下:

[DependsOn(typeof(Abp.Web.AbpWebModule),typeof(AbpWebMvcModule))]
public class StartModule : AbpModule
{
    public override void PreInitialize()
    {
        Configuration.Modules.AbpWeb().AntiForgery.IsEnabled = false;
        Configuration.Modules.AbpWebCommon().SendAllExceptionsToClients = true; 
    }
    public override void Initialize()
    {
        IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
        AreaRegistration.RegisterAllAreas();
        RouteConfig.RegisterRoutes(RouteTable.Routes); 
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }
    public override void PostInitialize()
    {
        GlobalConfiguration.Configuration.Filters.Add(new ExceptionFilter());
    }
    public override void Shutdown()
    {
    }
}

現在我們嘗試運行項目,結果項目成功啟動,如下圖。

即,我們雖然修改了WebApiApplication的繼承類,但依然可以正常訪問創建項目時,自動生成的Controller。

也就是說,ABP並沒有改變MVC的邏輯。

AbpController

ABP中提供了一個AbpController,它相當於對對MVC的Controller的擴展。

現在,我們找到HomeController,修改它的繼承,然后運行項目。

項目正常運行。

----------------------------------------------------------------------------------------------------

現在我們編寫一個AuthorizeAttribute,然后放到這個繼承AbpController的Controller上;代碼如下:

[CustomAuthorize]
public class HomeController : AbpController
{
    public ActionResult Index()
    {
        ViewBag.Title = "Home Page";
​
        return View();
    }
}

然后我們斷點CustomAuthorizeAttribute的AuthorizeCore函數。

測試結構發現,斷點可以被命中。

即,MVC的授權特性還可以正常使用。

----------------------------------------------------------------------------------------------------

ABP也提供了一個授權特性——AbpMvcAuthorize;很好理解,它是AuthorizeAttribute的一個擴展,和上面的AbpController一樣。

結語

總體上來說,ABP框架對微軟的WebApi做出了很好的封裝,提供了比較高級的擴展,即,動態創建WebApi,它切實的簡化了代碼。

但,對Controller,它並沒有提供太高級的功能,就是一些簡單的擴展和再封裝。

那么,如要使用ABP來開發MVC,就需要在學習微軟MVC的基礎上,再去學習ABP的方言了。

說實話,這樣做有點累;所以,開發項目時,使用微軟的MVC結構即可,因為網上有豐富的資源可用。

關於ABP的其他功能:

ABP的日志:ABP的日志因為沒辦法擴展到沒引用ABP的類庫里,而引用ABP又要引用一堆類庫;所以,全系統使用ABP的日志幾乎是不可能的,即,它意義不大,還是自己封裝日志比較好。

ABP提供的EF:ABP提供的EF因其使用和配置太過繁瑣,支持的功能又不是特別全面;且設計理念上,只有部分DDD的思想,然后,它還很難擴展;所以,基本上可以拋棄了,因為根本沒法和業務做最完美的結合。事實上,隨便找的開源的EF再封裝框架都比ABP的好理解,好調用。

ABP的依賴注入:ABP的依賴注入也是依賴Castle,那就是說我們完全可以直接使用Castle,這樣,效果比用他封裝的好;如果項目可以使用Core框架開發,那直接使用Core的依賴注入就可以了,這個比ABP的強太多了。

----------------------------------------------------------------------------------------------------

代碼已經傳到Github上了,歡迎大家下載。

Github地址:https://github.com/kiba518/AbpMvcController

----------------------------------------------------------------------------------------------------

注:此文章為原創,任何形式的轉載都請聯系作者獲得授權並注明出處!
若您覺得這篇文章還不錯,請點擊下方的推薦】,非常感謝!

https://www.cnblogs.com/kiba/p/12651512.html

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM