欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

【Net】ABP框架学习之它并不那么好用

程序员文章站 2022-03-26 23:20:11
前言 上一篇文章介绍了ABP的Web API,本文在继续介绍ABP的其他内容。 在ABP中,WEBAPI是一个值得用的东西。但其他东西,就不一定是那么好用了。 因为越深入的学习ABP,你就越会发现,它自身有着非常强的设计约束,而而微软的框架已经有一定的约束了,再使用一套附加约束,显然会更辛苦。 下面 ......

前言

 上一篇文章介绍了abp的web api,本文在继续介绍abp的其他内容。

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

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

下面我们看一下abp的controller。

创建项目

首先,我们创建一个mvc项目,abpmvccontroller。

然后引用abp.web.mvc。

【Net】ABP框架学习之它并不那么好用

使用了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的逻辑。

【Net】ABP框架学习之它并不那么好用

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

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

注:此文章为原创,任何形式的转载都请联系作者获得授权并注明出处!
若您觉得这篇文章还不错,请点击下方的推荐】,非常感谢!

 【Net】ABP框架学习之它并不那么好用