探索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. OpenLayers加载谷歌地图服务

    谷歌地图的地址如下: 谷歌交通地图地址:http://www.google.cn/maps/vt/pb=!1m4!1m3!1i{z}!2i{x}!3i{y}!2m3!1e0!2sm!3i3800725 ...

  2. SpringCloud项目启动报错:NoClassDefFoundError: org/springframework/core/env/EnvironmentCapable

    报错表象: 当启动SpringClud项目报错: Exception in thread "main" java.lang.NoClassDefFoundError: org/sp ...

  3. note 11 字典

    字典 Dictionary +什么是字典? +一系列的"键-值(key-value)"对 +通过"键"查找对应的"值" +类似纸质字典,通过 ...

  4. django框架使用mysql报错,及两种解决方法

    1.django框架 settings.py文件中部分代码: DATABASES = { # 'default': { # 'ENGINE': 'django.db.backends.sqlite3' ...

  5. mongoexport 导出需要授权数据库中的集合 报错 Authentication failed.

    当 mongo数据库启动服务时,使用了 认证机制,在使用mongoexport导出集合文件时,需要用户权限认证. 开启数据库认证服务: mongod --auth 导出mongo中集合文件: mong ...

  6. java 括号匹配 成对

    import java.util.Stack; public class Solution { public static void main(String[] args) { Solution s ...

  7. PG数据库中用户权限

    每当在数据库中创建一个对象,所有者可以分配它访问权限.所有者通常是执行创建语句的用户.对于大多数类型的对象,初始状态是,只有所有者(或超级用户)可以修改或删除对象.为了让其他角色或用户使用它,特权或权 ...

  8. 2522 和为K的倍数

    2522 和为K的倍数 2 秒 262,144 KB 10 分 2 级题   小b喜欢和为K的倍数的序列. 现在有一个长度为n的序列A,请问A有多少个非空连续子序列是小b喜欢的. 收起   输入 第一 ...

  9. Linux 添加新分区和 移动 /home到新挂载分区

    https://blog.csdn.net/lyd135364/article/details/78623119 https://www.cnblogs.com/saszhuqing/p/871664 ...

  10. winreg操作windows注册表详解示例

    #coding:utf-8 #=====================================================================#=====本程序演示了WINR ...