• 【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

     

  • 相关阅读:
    Kotlin基本语法笔记3之定义类、继承及创建实例
    Kotlin基本语法笔记2之类型检测及自动类型转换、循环
    Kotlin基本语法笔记之函数、变量的定义及null检测
    C++笔记之外部类访问内部类的私有成员
    正则表达式之不区分大小写的匹配
    springMVC之helloworld
    数组学习
    反射reflect
    JSP学习
    自己做的菜
  • 原文地址:https://www.cnblogs.com/kiba/p/12651512.html
Copyright © 2020-2023  润新知