星辰大海

人生万事须自为,跬步江山即寥廓

HTTP状态码:

摘抄至:

http://www.ruanyifeng.com/blog/2014/05/restful_api.html

前言

首先,什么是凸包? 假设平面上有p0~p12共13个点,过某些点作一个多边形,使这个多边形能把所有点都“包”起来。当这个多边形是凸多边形的时候,我们就叫它“凸包”。如下图:

图片1
阅读全文 »

概述

log4net 是 .Net 下一个非常优秀的开源日志记录组件。log4net 记录日志的功能非常强大。它可以将日志分不同的等级,以不同的格式,输出到不同的媒介。本文主要是介绍如何在 Visual Studio 中使用 log4net 快速创建系统日志,如何扩展以输出自定义字段。

阅读全文 »

FreeMove 是一款可以移动已安装软件程序文件夹的软件,很多时候软件在安装的时候选在了 A 分区,但是使用过一段时间后想移动到 B 分区,但是又不想卸载重新安装,这时候就需要用到这款 FreeMove 软件了。

阅读全文 »

Caliburn.Micro 附带了一个名为 IoC 的静态服务定位器。这让你可以从代码中的任何地方访问 IoC 容器,就像这样:

1
2
var vm = IoC.Get<MyDialogViewModel>();
this.windowManager.ShowDialog(vm);

Stylet 没有包含这个,而且有很好的理由:我不想鼓励人们编写如此糟糕的代码。服务定位器模式经常被称为反模式。现在每个类都有一个对 IoC 的依赖(而不是它所依赖的实际类),您不能仅通过查看类的构造函数就知道它的依赖关系是什么,相反,您必须遍历代码以才能得知它对IoC.Get的调用。

IoC 也在 Caliburn 内部使用导致产生了一些糟糕的设计选择。这些已经在 Stylet 中重新架构,因此内部不再需要IoC。

如果你真的需要 IoC 的支持(尽管它会导致糟糕的代码风格),那么你可以很容易地编写自己的 IoC。首先创建这个静态 IoC 类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public static class IoC
{
public static Func<Type, string, object> GetInstance = (service, key) => { throw new InvalidOperationException("IoC is not initialized"); };

public static Func<Type, IEnumerable<object>> GetAllInstances = service => { throw new InvalidOperationException("IoC is not initialized"); };

public static Action<object> BuildUp = instance => { throw new InvalidOperationException("IoC is not initialized"); };

public static T Get<T>(string key = null)
{
return (T)GetInstance(typeof(T), key);
}

public static IEnumerable<T> GetAll<T>()
{
return GetAllInstances(typeof(T)).Cast<T>();
}
}

然后在引导程序中添加下面的代码:

1
2
3
4
5
6
protected override void Configure()
{
IoC.GetInstance = this.Container.Get;
IoC.GetAllInstances = this.Container.GetAll;
IoC.BuildUp = this.Container.BuildUp;
}

在我曾经需要调试绑定的每个项目上,最简单的方法是在绑定上放置一个转换器,它只记录它看到的值。`DebugConverter 就是这样一个转换器的实现,它将记录对 Visual Studio 输出窗口的每次调用,前提是你正在运行一个调试版本。

阅读全文 »