探索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. Virtualbox扩展硬盘

    动态调整 1.VBoxManage showhdinfo win10.vdi 2.VBoxManage modifyhd win10.vdi --resize 61200 3.磁盘管理器中分配空间并格 ...

  2. python中Multiprocessing

    import multiprocessing as mp #该函数不能有返回值,如果需要则应该将值放在queue中 def job(a,b): print('aaaa') if __name__ == ...

  3. 转载:MySQL:亲测备份策略实例(线上真实备份案例)

    是否为线上库的备份而烦恼过,这里提供一个完整的备份从属数据库的备份方案,亲测可用 说明: 备份从库,按周计,每周进行一次全备 每周一的早上六点进行全备,其他时间备份中继日志 在从库上启用rsync服务 ...

  4. 软件测试:3.Exercise Section 2.3

    软件测试:3.Exercise Section 2.3 /************************************************************ * Finds an ...

  5. Vue Input输入框两侧加减框内数字组件

    NumberBox组件内容: <template> <div class="number-box" :class="{'box-disable': is ...

  6. 微信小程序隐藏滚动条

    全局wxss中添加以下样式,可以隐藏所有的滚动条: 包括使用scroll-view组件或者使用overflow-y:scroll;而出现的滚动条: 无论竖向横向滚动条都可隐藏: ::-webkit-s ...

  7. SOD框架的Model、连接数据库及增删改查

    using PWMIS.DataMap.Entity; using System; using System.Collections.Generic; using System.Linq; using ...

  8. vue简单的导航栏

    <style> img{ display:block; margin:0 auto; width:500px; height:500px; } #app li{ list-style: n ...

  9. 用JavaScript制作页面特效

    1.Window对象 名称 history:有关客户访问过的URL的信息 location:有关当前URL的信息 screen:有关客户端的屏幕和显示性能的信息 常用方法 prompt():弹出输入框 ...

  10. J Hello word

    jave 学习 public class Hello { public static void main (string args []) { int i = 0; for (i = 0; i < ...