探索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. C# Xamarin开发 GenyMotion adb List of devices attached

    最近,公司要求要学习Xamarin,说是将来用到PDA上,所以最近对XaMarin开始接触,16年的时候就听说.Net开始着实跨平台,安卓和IOS,但是网上看过很多资料都说Xamarin比较坑,一般的 ...

  2. TCP/IP学习20180710-数据链路层-ICMP协议

    1.ICMP协议IP协议不保证数据送达.则应有协议保证数据送达.ICMP就是其中的重要协议.ICMP:(Internet Control Messages Protocol)因特网信报控制协议当传送I ...

  3. 从9x9矩阵中抽取中间菱形区域打印 - perl

    起因: 源自于c的练习题,打印diamond,因为perl不需编译,方便调试,故先用perl实现一下 关键: 没有想到好的思路,只能借助于上一篇打印上下三角矩阵的方法,把菱形拆成上下左右4个三角矩阵区 ...

  4. Two kinds of item classification model architecture

    Introduction: Introduction to Fusing-Probability model: Cause the input has two parts, one is item i ...

  5. QT中QMainWindow、QWidget、QDialog

    QT中QMainWindow.QWidget.QDialog 简述 在分享所有基础知识之前,很有必要在这里介绍下常用的窗口-QWidget.QDialog.QMainWindow. 熟悉Qt的同学都应 ...

  6. Google推出了Python最牛逼的编辑器

    环境配置对于大多数人来说都是拦路虎,我们小白往往不知道: 怎么正确的安装 不知道选择什么 怎么安装常用的第三方库 ... Google推出了一个在线的网站 https://colab.research ...

  7. Android开发 解决EditText与NestedScrollView 滚动冲突问题

    问题简述 在将EditText套进NestedScrollView的情况下,EditText输入了多行内容后,无法触摸滚动到第一行 问题原因 在将EditText套进NestedScrollView的 ...

  8. 75.纯 CSS 创作一支摇曳着烛光的蜡烛

    原文地址:https://segmentfault.com/a/1190000015580809 学习后效果地址:https://scrimba.com/c/c8PQ3PTB 感想:CSS 真强大! ...

  9. 11. java中路径/和\的区别

    一般可以认为是"/"的作用等同于"\\"在java中路径一般用"/"windows中的路径一般用"\"linux.uni ...

  10. js 手写 Promise

    /* * pending:初始化成功 * fulfilled:成功 * rejected:失败 * */ function Promise(cback){ this.status = 'pending ...