初学 AngularJS 时, 肯定会对其提供 factory 、 service 和 provider 感到疑惑, 这三种都是提供服务的方式, 他们到底有什么区别呢? factory factory 可以认为是设计模式中的工厂方法, 就是你提供一个方法, 该方法返回一个对象的实例, 对于 AngularJS 的 factory 来说, 就是先定义一个对象, 给这个对象添加属性和方法, 然后返回这个对象, 例如: var app = angular.module('MyApp', []); app.factory('MyFactory', function() { // ... 阅读全文

ASP.NET Web API 是 .NET 平台创建 REST 风格的 HTTP 服务的理想框架, REST 风格的 HTTP 服务可以被多种客户端使用, 包括浏览器和移动设备, 使用 REST 风格的 HTTP 服务也越来越多。 由于 REST 服务的逐渐流行, 越来越多的客户端类库都提供了 REST 服务的专用类库, AngularJS 也不例外, 提供了 $resource 来实现 REST 服务的支持。 在 AngularJS 的文档中, 对 $resource 的描述如下: A factory which creates a resource object tha... 阅读全文

ASP.NET Mvc vNext 改名为 ASP.NET 5 , 看来距离正式发布已经不远了, 在发布之初就号称可以跨平台运行, 在发布的早期 alpha 版本中, 做个一次在 mono 下尝试 ASP.NET vNext的试验, 虽然最终以失败告终, 但是在试验的过程中还是还是收获良多, 对 OWIN 有了更深一步的认识, 也熟悉了 OWIN 的第三方实现 Nowin 。 现在最新发布的 ASP.NET 5 版本为 Beta 2, 不仅功能更加完善, 第三方资料也多了很多, 不过完全依靠微软提供的资源还不能在非 Windows 平台运行, ASP.NET 5 可以在 OWIN 环境... 阅读全文

搭建好了基于 OWIN 的 OAuth2 服务器之后, 接下来就是如何从服务器取得授权了, 下面就介绍如何实现 OAuth2 定义的四种授权方式。 授权码授权 (Authorization Code Grant) 授权码授权针对机密的客户端优化, 可以同时获取访问凭据 (access token) 和刷新凭据 (refresh token) , 因为是基于 HTTP 重定向的方式, 所以客户端必须能够操纵资源所有者的用户代理(通常是浏览器)并且能够接收从授权服务器重定向过来的请求。 在实现上使用开源的 DotNetOpenAuth 来简化实现代码, DotNetOpenAuth... 阅读全文

关于 OAuth 维基百科中对 OAuth 的描述如下: OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。 OAuth允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。这样,OAuth让用户可以授权第三方网站访问他们存储在另外服务提供者的某些特定信息,而非所有内容。 很多知名网站都采用支持... 阅读全文

关于代码映射 NHibernate 3.2 自带了代码映射机制, 作为 xml 映射之外的一种映射方式, 由于推出的时间比较晚, 所以资料相对比较少, 而且与社区版的 Fluent Mapping 和 Attribute Mapping 不同, 有其独特的设计风格。 下面就通过一个实例来说明怎么使用 NHibernate 自带的代码映射。 实体关系 要映射的类关系图如下: 上图中有三个实体类, 他们之间的关系说明如下: Product 与 Store 之间是多对多关系; Store 与 Employee 之间是一对多关系; Employee 与 Store ... 阅读全文

Web API 的依赖注入 Web API 定义了依赖注入的接口 IDependencyResolver , 定义如下: public interface IDependencyResolver : IDependencyScope, IDisposable { IDependencyScope BeginScope(); } public interface IDependencyScope : IDisposable { object GetService(Type serviceType); IEnumerable<object> GetSe... 阅读全文

多视图应用 AngularJS 通过路由支持多视图应用, 可以根据路由动态加载所需的视图, 在 AngularJS 的文档中有详细的介绍, 网上也有不少教程, 就不用介绍了! 随着视图的不断增加, js文件 会越来越多, 而 AngularJS 默认需要把全部的 js 都一次性加载, 使用起来非常不便, 因此按需加载模块的需求会越来越强, 不过, AngularJS 并没有实现按需加载。 异步加载 关于异步加载, AngularJS 的开发指南中有这样一段话: Modules are a way of managing $injector configuration, ... 阅读全文

AngularJS 目前的版本没有遵循 Javascript 约定的 AMD 模块化规范, 因此使用 RequireJS 加载 AngularJS 时需要一些额外的配置。 通过查阅 RequireJS 的文档, RequireJS 通过配置可以支持支持动态加载没有遵循 AMD 规范的脚本, 接下来就看一下怎么配置: 先在页面引入 RequireJS 脚本, 这个很简单, 只要一个 script 标记: < script type="text/javascript" src="scripts/lib/require/require.js" data-main="scripts/... 阅读全文

最近需要将一些命令行程序包装成后台服务, 本来可以用 .NET 完成, 不过又想尝试一下用 C 语言实 现 Windows 服务, 发现用 C 语言做 Windows 服务也是很容易的, 步骤如下: 1 包含必要的头文件, 并定义一些常量, 代码如下: #include <windows.h> #include <stdio.h> // 服务线程暂停时间; #define SLEEP_TIME 5000 // 日志文件输入路径 #define LOGFILE "C:\\memstatus.txt" 2 写日志文件, 几乎所有的服务都有日志输出, 即使是... 阅读全文

红黑树的创建 2014-09-12

在二叉查找树的最后提到, 二叉树最终的形状如下图所示: 实际上,为了避免二叉树形状向最坏情况靠拢, 通常会创建能够自平衡的 2-3 树。 而 红黑树 是 2-3 树比较简单的一种实现形式: 红黑树将用二叉树表示 2-3 树, 实现起来相对容易; 内部使用向左倾斜的链接表示第三个节点; 红黑树定义如下: 没有任意节点拥有两个红色链接; 从跟节点到末节点的黑色链接数目相等; 红色节点向左倾斜; 用红黑树来表示 2-3 树例子: 红黑树的节点定义 节点定义 在二叉查找树节点的基础上增加一个 Color 字段, 相关代码如下: // Co... 阅读全文

二叉查找树 2014-09-06

二叉查找树定义 二叉查找树 (Binary Search Tree) 是按照平衡顺序排列的二叉树, 也称二叉搜索树、 有序二叉树(ordered binary tree),排序二叉树(sorted binary tree)。 首先, 要符合二叉树的特性: 可以为空; 也可以拥有连个互不相交的子树, 即: 左子树和右子树。 平衡排序, 每个节点都有一个 key, 并且每个节点的 key 都符合: 大于左子树中所有节点的 key; 小于右子树所有节点的 key ; 二叉查找树节点必须包含四个字段: 一个 Key 和一个 Value ; ... 阅读全文