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

前言html

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

在ABP中,WEBAPI是一個值得用的東西。但其餘東西,就不必定是那麼好用了。github

由於越深刻的學習ABP,你就越會發現,它自身有着很是強的設計約束,而而微軟的框架已經有必定的約束了,再使用一套附加約束,顯然會更辛苦。app

下面咱們看一下ABP的Controller。框架

建立項目ide

首先,咱們建立一個MVC項目,AbpMvcController。函數

而後引用Abp.Web.Mvc。學習

使用了ABP後,必須修改WebApiApplication的繼承類,因此,原來的初始化的路由等等信息,要換個地方寫了,下面咱們看看變化。測試

將WebApiApplication改成繼承Abp.Web.AbpWebApplication;Global.asax修改以下:ui

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

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

注:此文章爲原創,任何形式的轉載都請聯繫做者得到受權並註明出處!
若您以爲這篇文章還不錯,請點擊下方的推薦】,很是感謝!

http://www.javashuo.com/article/p-mgfjlkpf-dm.html

 

相關文章
相關標籤/搜索