探索Nancy模块

模块是任何Nancy应用程序中的主角,因为它是您定义应用程序行为的地方,所以无法避免使用它。

事实上,在任何的Nancy应用程序中,声明模块是最基本的要求。

通过继承NancyModule 类就可以创建一个模块,就是这么简单。

一旦你拥有一个模块,你就可以开始定义你应用程序的行为,如果被调用,将以路由的形式执行他们的动作。

简单的说,模块将决定Nancy在运行时如何展现。

模块不仅仅只是运行您定义应用程序行为,它还可以让您访问一系列有用的功能,例如 当前请求的完整信息,访问当前请求的上下文,帮助构建特定类型的返回结果(例如json,xml,files,重定向) ,呈现视图等等...

您可以在应用程序中定义尽可能多的模块,至少应该有一个模块,并且至少定义一个路由。

模块是全局查找的

块可以在任何您喜欢的地方声明,因为他们在运行时的应用程序域中可用。

Nancy将通过扫描并识别那些NancyModule的所有子类型。

这就意味着您可以在外部程序中定义模块。只要程序集运行时存在应用程序域中-通过引用和动态加载-这样就会被扫描到。您可以由此来重用跨应用程序的行为,甚至可以为其创建一个不错的nuget包。

如果您认为扫描模块很浪费资源,不要担心。这种操作不会每次请求都去执行,它是Nancy应用程序启动时的一部分,仅仅执行一次,然后被缓存。

使用模块为您的路由创建一个根路径

模块的一个简而整洁的功能是可以定义模块路径。您可以将此看做为模块的所有路由定义根命名空间,每个路由都将从属于模块的路径,这样就可以避免重复路径中相同的部分,并可以很好的将您的路由通过关系组合到一起。

 public class ResourceModule : NancyModule
{
public ResourceModule() : base("/products")
{
// would capture routes to /products/list sent as a synchronous GET request
Get["/list"] = parameters => {
return "The list of products";
};
}
}

Practice

 
之前的代码部分,运行浏览器键入地址:http://localhost/products/list
 

总结

实际上Nancy查找组件的方式和大多数框架类似,都是查找一次然后缓存。就像MVC的Conroller的激活和Action的执行一样,并不是每次请求都会去查找。

不过,定义根路径这个功能很有意思,简单而且灵活。

转载请标明出自:本文地址

Nancy.Net之旅-探索模块的更多相关文章

  1. Nancy.Net之旅-初次见面

    Welcome Nancy   首先,欢迎来到Nancy!我们的主要灵感是Ruby的Sinatra框架,因此Nancy以Frank Sinatra的女儿名字命名.许多人想知道NancyFx中的Fx是什 ...

  2. AngularJS学习之旅—AngularJS 模块(十五)

    一.AngularJS 模块 模块定义了一个应用程序. 模块是应用程序中不同部分的容器. 模块是应用控制器的容器. 控制器通常属于一个模块. 1.创建模块 通过 AngularJS 的 angular ...

  3. Python之旅Day6 模块应用

    time datetime random os sys shutil pickle json shelv xml configparser hashlib subprocess logging re ...

  4. python之旅:模块与包

    一.模块介绍 前言:引用廖雪峰大神的,说的很好!!! 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放 ...

  5. 第1章—Spring之旅—Spring模块介绍

    Spring模块介绍 Spring7大核心模块: 核心容器(Spring Core) 核心容器提供Spring框架的基本功能.Spring以bean的方式组织和管理Java应用中的各个组件及其关系.S ...

  6. 探索 模块打包 exports和require 与 export和import 的用法和区别

    菜单快捷导航: CommonJS 之 exports和require用法 ES6 Module 之 export 和 import 用法 CommonJS和ES6 Module的区别 循环依赖 和 解 ...

  7. Nancy Web框架

    原文 Nancy Web框架 Nancy框架 一.创建第一个Nancy应用 二.探索Nancy的module 1. 模块能够在全局被发现 2. 使用模块为路由创建一个根 三.定义路由 1. 方法 2. ...

  8. 谈谈Nancy中让人又爱又恨的Diagnostics【上篇】

    前言 在Nancy中有个十分不错的功能-Diagnostics,可以说这个功能让人又爱又恨. 或许我们都做过下面这样的一些尝试: 记录某一个功能用到的相关技术信息 记录下网站的访问记录 全局配置某些框 ...

  9. Python 学习 第九篇:模块

    模块是把程序代码和数据封装的Python文件,也就是说,每一个以扩展名py结尾的Python源代码文件都是一个模块.每一个模块文件就是一个独立的命名空间,用于封装顶层变量名:在一个模块文件的顶层定义的 ...

随机推荐

  1. Windows下Mysql5.7忘记root密码的解决方法

    找到mysql5.7安装的目录,我这里是:C:\Program Files\MySQL\MySQL Server 5.7 先停止mysql服务 在服务里找到MySQL57服务,停掉它. 修改my.in ...

  2. 数据库乐观锁和悲观锁的理解和实现(转载&总结)

    数据的锁定分为两种,第一种叫作悲观锁,第二种叫作乐观锁. 1.悲观锁,就是对数据的冲突采取一种悲观的态度,也就是说假设数据肯定会冲突,所以在数据开始读取的时候就把数据锁定住.[数据锁定:数据将暂时不会 ...

  3. Eclipse安装springsource-tool-suite插件及spring helloworld入门实例

    转载至: https://www.cnblogs.com/aaron-shu/p/5156007.html 一.查看eclipse版本 Help-->About Eclipse,我的版本是4.4 ...

  4. [SQL]事务回滚详解及示例

    存储过程中的 SET XACT_ABORT ON 和事务 在存储过程中写SET XACT_ABORT ON 有什么用? SET XACT_ABORT ON是设置事务回滚的! 当为ON时,如果你存储中的 ...

  5. LeetCode 797. All Paths From Source to Target

    题目链接:https://leetcode.com/problems/all-paths-from-source-to-target/description/ Given a directed, ac ...

  6. win10更新后出现System.ComponentModel.Win32Exception

    win10更新后出现System.ComponentModel.Win32Exception 我的环境是由于“sql server2012 无法连接到WMI提供程序”引起的 参考http://www. ...

  7. postgresql清理工具

    1. 每个DB都单独进行了vacuumdb的命令: vacuumdb -d mydb -z -v 2. full vacuum : vacuumdb -a  -f -z -v  .  自动vacuum ...

  8. RAMDISK 内存盘工具推荐

    好了直接推荐, 1.魔方内存盘  使用方便 ,但是关机后消失.绿色 2.Primo Ramdisk Ultimate Edition5.5 3.GiliSoft RAMDisk 4.QSoft RAM ...

  9. Access Token 与 Refresh Token【转载哒科普啊】

    Access Token 与 Refresh Token   access token 是客户端访问资源服务器的令牌.拥有这个令牌代表着得到用户的授权.然而,这个授权应该是临时的,有一定有效期.这是因 ...

  10. [SQL][MS SQL]ID自增列从1开始重新排序

    数据库中把ID自增长重置成1: 一般做法:(太麻烦) 复制表数据->删除原表.新建一张表->粘贴: 新方法: 数据库中:新建查询->复制.粘贴一下代码->修改表名,执行即可(先 ...