【Net】ABP框架学习之它并不那么好用
前言
上一篇文章介绍了abp的web api,本文在继续介绍abp的其他内容。
在abp中,webapi是一个值得用的东西。但其他东西,就不一定是那么好用了。
因为越深入的学习abp,你就越会发现,它自身有着非常强的设计约束,而而微软的框架已经有一定的约束了,再使用一套附加约束,显然会更辛苦。
下面我们看一下abp的controller。
创建项目
使用了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的好理解,好调用。
----------------------------------------------------------------------------------------------------
代码已经传到github上了,欢迎大家下载。
github地址:https://github.com/kiba518/abpmvccontroller
----------------------------------------------------------------------------------------------------
注:此文章为原创,任何形式的转载都请联系作者获得授权并注明出处!
若您觉得这篇文章还不错,请点击下方的【推荐】,非常感谢!