前言

上一篇文章介绍了ABP的Web API,本文在继续介绍ABP的其他内容。

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

因为越深入的学习ABP,你就越会发现,它自身有着非常强的设计约束,而而微软的框架已经有一定的约束了,再使用一套附加约束,显然会更辛苦。

下面我们看一下ABP的Controller。

创建项目

首先,我们创建一个MVC项目,AbpMvcController。

然后引用Abp.Web.Mvc。

使用了ABP后,必须修改WebApiApplication的继承类,所以,原来的初始化的路由等等信息,要换个地方写了,下面我们看看变化。

将WebApiApplication改为继承Abp.Web.AbpWebApplication;Global.asax修改如下:

usingAbp.Web;usingAbpMvcController;usingSystem;usingSystem.Web;

[assembly: PreApplicationStartMethod(typeof(PreStarter), "Start")]namespaceAbpMvcController

{public class WebApiApplication : Abp.Web.AbpWebApplication{protected override void Application_Start(objectsender, EventArgs e)

{base.Application_Start(sender, e);

}

}

​public static classPreStarter

{public static voidStart()

{

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 classStartModule : AbpModule

{public override voidPreInitialize()

{

Configuration.Modules.AbpWeb().AntiForgery.IsEnabled= false;

Configuration.Modules.AbpWebCommon().SendAllExceptionsToClients= true;

}public override voidInitialize()

{

IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());

AreaRegistration.RegisterAllAreas();

RouteConfig.RegisterRoutes(RouteTable.Routes);

BundleConfig.RegisterBundles(BundleTable.Bundles);

}public override voidPostInitialize()

{

GlobalConfiguration.Configuration.Filters.Add(newExceptionFilter());

}public override voidShutdown()

{

}

}

现在我们尝试运行项目,结果项目成功启动,如下图。

即,我们虽然修改了WebApiApplication的继承类,但依然可以正常访问创建项目时,自动生成的Controller。

也就是说,ABP并没有改变MVC的逻辑。

AbpController

ABP中提供了一个AbpController,它相当于对对MVC的Controller的扩展。

现在,我们找到HomeController,修改它的继承,然后运行项目。

项目正常运行。

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

现在我们编写一个AuthorizeAttribute,然后放到这个继承AbpController的Controller上;代码如下:

[CustomAuthorize]public classHomeController : AbpController

{publicActionResult Index()

{

ViewBag.Title= "Home Page";

​returnView();

}

}

然后我们断点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上了,欢迎大家下载。

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

注:此文章为原创,任何形式的转载都请联系作者获得授权并注明出处!

若您觉得这篇文章还不错,请点击下方的【推荐】,非常感谢!

JAVA类似ABP框架_【Net】ABP框架学习之它并不那么好用相关推荐

  1. python 分布式计算框架_漫谈分布式计算框架

    如果问 mapreduce 和 spark 什么关系,或者说有什么共同属性,你可能会回答他们都是大数据处理引擎.如果问 spark 与 tensorflow 呢,就可能有点迷糊,这俩关注的领域不太一样 ...

  2. JAVA类似ABP框架_使用ABP框架踩过的坑系列5

    DDD领域驱动开发,实际是为复杂的业务场景而生的,为了让开发人员专注于业务,而操作系统.数据库.网络之类的技术细节,必须要持久透明化:实际就是数据库系统DBMS的ORM抽象,目标就是业务不需要考虑数据 ...

  3. java审批流程框架_基于SSM框架下的JAVA企业流程审批系统

    每天记录学习,每天会有好心情.*^_^* 今天将为大家分析一个企业流程审批系统(现代企业对资金流的控制十分严格,但是绝大部分企业的费用审批还停滞在手动填单.逐级递交.逐级审批的现状,既没有效率也不利于 ...

  4. java 路由框架_使用Spring框架和AOP实现动态路由

    本文的大体思路是展示了一次业务交易如何动态地为子系统处理过程触发业务事件.本文所示的例子使用Spring框架和Spring AOP有效地解耦业务服务和子系统处理功能.现在让我们仔细看看业务需求. 业务 ...

  5. java 分布式rpc框架_分布式RPC框架Apache Dubbo(一)

    4 Dubbo快速入门 Dubbo作为一个RPC框架,其最核心的功能就是要实现跨网络的远程调用.本小节就是要创建两个应用,一个作为服务的提供方,一个作为服务的消费方.通过Dubbo来实现服务消费方远程 ...

  6. java实现医嘱管理系统_基于SSM框架的JAVA医嘱管理系统

    今天将为大家分析一个医嘱管理系统(随着科学技术的进步,医院规模的不断壮大,计算机在我院的应用已相当广泛,它既能提高工作效率,又能实现信息共享.我院使用医嘱管理系统后,实现了医嘱处理计算机化,医嘱处理方 ...

  7. java jdbc jar包_通过 Spring 框架如何进行JDBC操作呢?

    Spring 整合 JDBC 的方式 添加依赖 编写配置文件 db.properties bean.xml 配置修改 配置数据源 模板类配置 测试整合结果 案例实操 添加依赖 数据库驱动 jar 包 ...

  8. java iot框架_物联网开源框架Thingsboard使用总结

    总架构 文档:https://thingsboard.io/docs/reference/architecture/ 并发模型: Actor模型akka 集群协作:zookeeper 支持协议:mqt ...

  9. guice 框架_玩! 框架+ Google Guice

    guice 框架 在我目前正在工作的项目中,我们开始使用Google Guice. 对于那些不知道的人, Google Guice是一个依赖项注入框架. 依赖项注入的基本思想是提供一个其依赖的类,而不 ...

  10. quartz框架_定时任务调度框架Quartz

    最近需要写一个每天定点自动执行的定时任务,对于以前自己写小项目,可能会选择java自带的Timer类,但是对于公司中的项目,Timer类实现定时任务只能有一个后台线程执行任务,并且只能让程序按照某个频 ...

最新文章

  1. ie下input的type属性为hidden问题
  2. 腾讯胡珀:数字时代,每个人的安全都值得被守护
  3. 阿里云盘内测_阿里云盘内测邀请码发放
  4. C言语教程第四章: 数组(4)
  5. c++中的构造函数和析构函数
  6. python实现QQ机器人(自动登录,获取群消息,发送群消息)
  7. IP地址,开放端口,http与https的区别
  8. 小米手机MIUI安装Google服务框架和Google Play的教程
  9. Spring Configuration Check ----Unmapped Spring configuration files found.
  10. 员工工号怎么编码_人事档案编码怎么编
  11. web前端学习26(锚点链接)
  12. WordPress 主题和插件
  13. 中国大学慕课公开课-《视听语言》-学习笔记-2
  14. 环宇智行基于NVIDIA TX2的L4级自动驾驶方案
  15. 资深前端老司机到底牛逼在哪?
  16. DPDK(六):DPDK整体介绍
  17. Java性能监控和故障诊断可视化工具之jmc
  18. (六)安装xdd-plus的保姆级搭建教程+xdd-plus修复+对接青龙+指令用途/看了你就能学废【2022年5月23日】【更新】
  19. 我在网易实习的日子:爱与被爱之中成长
  20. 华为的备胎被迫转正。

热门文章

  1. [转自天涯]ISO27001与ISO20000的关系心得
  2. Windows取证分析基础知识大全
  3. 创业维艰--书摘+乱七八糟
  4. 【pytorch】——报错 exporting the operator pixel_unshuffle to onnx opset version 11 is not supported
  5. Linux操作系统基本知识
  6. java 原子量_Java线程:原子量
  7. tar命令常见用法汇总
  8. amazeui学习笔记--css(HTML元素1)--按钮Button
  9. 线上幽灵:世界头号黑客米特尼克自传(体验头号黑客传奇人生,洞悉头号黑客思维模式!启明,绿盟,安天,安全宝,百度,腾讯,阿里……众安全专家一致推荐!)...
  10. web前端知识体系之基础知识 - CSS语言和功能