【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的逻辑。
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上了,欢迎⼤家下载。
----------------------------------------------------------------------------------------------------
注:此⽂章为原创,任何形式的转载都请联系作者获得授权并注明出处!
若您觉得这篇⽂章还不错,请点击下⽅的【推荐】,⾮常感谢!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论