首页 > GAME > 游戏 > 正文

白城霞木频工程有限公司,巴中汾制脸科技,南昌堑壹烦健身服务中心

众人停下脚步。上百里地前行令他们地身体都已经热了起来。尤其是奥斯卡和宁荣荣,作为辅助魂师。他们的身体素质虽然也还不错,但却终究不能和唐三他们相比。

压大小稳赢的计算公式

“绝对没有,本官办案向来都讲证据,那书生饱读诗书不假,确是暗中与嫂子做出苟且之事,本官得报之后,问过乡邻,得知二人私下关系甚笃,所以才会秉公办理。”
悟空看了看虎力鹿力羊力三人,想起三界中捉弄他们的往事,又见羊力大仙仍是一幅结巴相,忍不住哈哈大笑起来。

胡兴宁每天都会都在寝室里弹吉他,两班寝室邻近,3班几乎所有男生都听过胡兴宁弹吉他,他说丁宁会弹吉他,谁还敢质疑。

手工搭建ABP框架(1) - Web项目


为了防止不提供原网址的转载,特在这里加上原文链接:
http://www.cnblogs.com/skabyy/p/7295533.html

ABP是 ASP.NET Boilerplate Project 的简称。ABP是基于DDD(领域驱动设计)的框架。ABP包含众多组件,包括依赖注入、动态API、审计日志、权限控制等等。在大部分的ABP教材中,会推荐使用模板(https://aspnetboilerplate.com/Templates)来创建ABP工程。然而在实际使用中(至少在我的情况里)一般都需要手工搭建框架而非使用模板。手工搭建有下面几个好处:

  1. 模板创建的工程有很多不需要的东西需要调整或删除,手工搭建免去了这些麻烦;
  2. 手工搭建框架能更自由地根据实际需求进行自定义配置和扩展;
  3. 手工搭建能帮助你更深入地理解ABP框架。

由于手工搭建ABP框架材料较少,我搭建时踩了不少坑。所以在这里记录一下搭建框架的核心步骤,以免以后重新摸索,同时与大家分享,欢迎拍砖。下面我们以开发一个简单的微博应用为例来展示如何使用ABP框架。

新建VS项目

用VS新建Web MVC项目,项目名称为MyTweet.Web。同时新建解决方案,解决方案名称为MyTweet要注意的一点是ABP只支持.NET 4.6以上版本,所以新建项目时记得选.NET Framework 4.6以上的版本

接下来,我们遵循DDD的原则,新建以下几个层次的项目:

  1. 展现层(Presentation),负责用户界面与用户交互。在我们这个应用中,展现层是.NET MVC,包括Controller以及前端代码,实现在项目MyTweet.Web中。
  2. 应用层(Application),负责展现层与领域层之间的协调。实现在项目MyTweet.Application中。
  3. 领域层(Domain),负责业务对象与业务逻辑。实现在项目MyTweet.Domain中。
  4. 基础设施层(Infrastructure),提供一些通用的方法。实现在项目MyTweet.Infrastructure中。

新建好项目后,还需要设置引用依赖关系。在此不再赘述。

安装ABP相关的NuGet包

安装Abp包到所有项目。

安装Abp.Web.MvcAbp.Web.ApiMyTweet.Web

创建模块

ABP提供了模块系统。使用模块能方便地管理各个组件的初始化与依赖关系。一般来说,每个项目都会建一个模块。由于本篇只用到了MyTweet.WebMyTweet.Application,所以先只新建这两个模块。

MyTweet.Application目录下新建类MyTweetApplicationModule,并继承自AbpModule。如图:

模块中的Initialize方法定义了模块初始化时执行的操作。目前只做了IoC依赖注入的操作。

另外,在MyTweet.Web/App_Start目录下新建类MyTweetWebModule,同样也需要继承自AbpModule,并且,这个模块还需要依赖AbpWebApiModule(WebAPI需要这个模块),MyTweetApplicationModule。如图:

最后,为了让程序运行时能识别并执行模块,需要修改入口方法。.NET MVC的入口方法在Global.asax.cs文件中,如下图,MvcApplication修改为继承AbpWebApplication<MyTweetWebModule>,并相应地修改Application_Start方法。

WebAPI

我们使用WebAPI的方式定义前后端交互的接口。当然,直接使用MVC的方法也是可以的。这里只是单纯为了试用ABP动态WebAPI的用法而使用的WebAPI。

我们将实现两个接口:

  1. GetTweets接口,GET方法,用于查询出所有微博。
  2. CreateTweet接口,POST方法,用于新增一条微博。

因为我们还没实现数据库访问功能,所以现在还不会真正实现这两个接口,这两个接口现在只让它们返回一些测试数据。

在ABP框架下实现WebAPI十分方便,ABP能够使用反射的方法自动从应用层AppService的public方法生成WebAPI接口。只需在MyTweetModule的初始化方法添加代码定义动态ApiController生成规则:

这些代码会在MyTweetApplicationModule的程序集中,将所有IApplicationService的实现类动态生成ApiController,并且根据方法名对public方法绑定相应的HTTP Method动词。
比如,GetTweets绑定为GET方法,PutTweet绑定为PUT方法,其他名称的方法像CreateTweet绑定为POST方法。
(这里有一个例外,Get开头的方法如果参数是一个object——一个DTO的话,那这个方法会被绑定为POST方法。)
生成的WebAPI接口的访问路径为/api/services/MyTweet/{AppSvcName}/{ActionName},其中{AppSvcName}IApplicationService实现类的类名(去掉后缀AppService),{ActionName}是方法名。

接下来我们实现GetTweetsCreateTweet两个接口:

现在只是简单的让这两个接口随便返回一些结果。GetTweets是接收一个字符串参数的GET接口,CreateTweet是接收一个字符串s、一个整数s的POST接口(C#与JavaScript对大小写的编码规范不同是一件很烦人的事,幸好ABP框架做了自动转换)。这两个接口的路径分别为/api/services/MyTweet/MyTweet/GetTweets/api/services/MyTweet/MyTweet/CreateTweet

最后测试一下,运行MyTweet.Web项目,GET接口直接在浏览器就能访问:

POST接口可以用Postman工具来访问:

大功告成!

你访问API的时候可能会出现"Empty or invalid anti forgery header token"的错误,这是因为某些ABP版本默认开启了CSRF防御。在MyTweetWebModulePreInitialize方法加上下面这行代码关闭CSRF防御就可以了。

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

Abp Module

最后简要介绍下ABP的模块系统。更详细的讲解可查阅官网的文档https://aspnetboilerplate.com/Pages/Documents/Module-System。

模块主要用来管理系统初始化和关闭时要执行的操作。ABP在系统初始化和关闭时根据模块间依赖关系执行相应的操作。

定义一个模块只需要继承AbpModule。我们可以用DependsOn标签来声明模块间的依赖关系(ABP框架会自动解析依赖关系,但建议使用显式的声明)。

一个模块会有如下方法,我们可以重载这些方法来定义模块初始化/关闭时要做的操作:

  • PreInitialize:预初始化
  • Initialize:初始化
  • PostInitialize:后初始化
  • Shutdown:关闭

应用启动时会根据模块的依赖顺序进行初始化。比如有模块A和模块B,模块A依赖模块B,那么初始化的执行顺序为:

  1. B的PreInitialize
  2. A的PreInitialize
  3. B的Initialize
  4. A的Initialize
  5. B的PostInitialize
  6. A的PostInitialize

关闭则按照依赖相反顺序:

  1. A的Shutdown
  2. B的Shutdown

最后还有一个问题:应用启动时,ABP框架如何知道要初始化哪些模块?答案在入口函数方法:

ABP框架解析MyTweetModule所依赖的模块,按顺序初始化这些模块(包括MyTweetModule)。

当前文章:http://mabebox.com/array/ph16ze88v8.html

发布时间:2019-01-20 06:25:31

海纳联盟挂机赚钱系统 电脑流量挂机赚钱 转发赚钱的软件 钱多多嫁人记全集 广西金融投资互联网 羊毛党 71团平台兼职押金多少 深圳大学兼职

编辑:文伯伯丁


声明:所发布的内容均来源于互联网,目的在于传递信息,但不代表本站赞同其观点及立场,版权归属原作者,如有侵权请联系删除。
有赚网怎么赚钱

网上兼职qq挂机

如何通过网络赚钱