从. net 3.5 启动是一种称为扩展方法的功能。扩展方法允许开发人员使用自己的实例方法扩展类。这是一个在其他语言中通常称为 "混战" 的概念。以下面的一段代码为例。在上面, 简单地说, 我们看到一个帮助器类, 它有一个静态方法来确定是一个字符串是 "短" 的。虽然这个例子很荒谬, 但它有助于说明扩展方法的根本愿望。通常情况下, 我们的源代码中到处都是与上面非常相似的帮助器类。在您的代码周围也到处都是此类实用程序类的用法。因此, 例如, 您将使用如下的用法:. net 3.5 中的扩展方法为上述内容提供了语法快捷方式。要将我们的 isshort 函数更改为 system. string 前缀的扩展到参数列表中。这就是将普通帮助器方法转换为. net 3.5 中的扩展方法所需的全部。但是, 有一些规则需要记住扩展方法。
分类: C#
银灯进度条
silverlight 2 为创建丰富的互联网应用程序提供了一个有吸引力的平台, 然而, 当第一次开始布局模型的怪癖和某些控件和类的奇怪的缺乏和令人费解。
银光工具箱中的一个令人费解的缺失是进度条控件。wpf 有一个进度条, wypforms 有一个进度条, 但没有 silverlight。幸运的是, 实现一个并没有那么难, 并提供了一个很好的介绍银光的布局模型。
银光和层数
与 asp. net 和许多其他形式技术不同, silverlight 使用多层定位系统。"画布" 控件对于允许对多个控件进行分层特别有用。
以这个简单的 xaml 块为例:
<Canvas x:name="LayoutRoot" background="WhiteSmoke"></Canvas> <Rectangle width="60" height="60" fill="Green"></Rectangle> <Rectangle width="60" height="60" fill="Gray"></Rectangle> <Rectangle width="60" height="60" fill="LightBlue"></Rectangle>
银光消息盒
奇怪的是, 银光不够缺少 messagebox 类。幸运的是, silverlight 的 html 桥公开了 javascript 警报方法, 该方法在功能上是相同的。
社区编码竞赛
开发开源项目是一次非常有益的经历。但遗憾的是 (作为开源开发人员) 开源项目很少得到他们应得的反馈。通常, 开发人员只有在软件被破坏时才会听到用户的反馈, 正因为如此, 往往很难知道作者的作品何时才会得到真正的欣赏。
无 gac 安装的 aspnetserve
这个话题已经出现了很多次, 那就是 "为什么我必须在 gac 中注册 aspNETserve.Core.dll 才能运行 aspnetserve?" 这个问题的答案与 aspnetserve 如何使用 asp. net 宿主设施有关, 因此首先提供一些背景信息。
什么是新的
正如我在上一篇文章中提到的, aspnetserve 1.3 刚刚发布。随之而来的是一些激动人心的变化。以下是一些最显著的变化的概述:
aspnetserve 的目标是针对 http 协议的1.1 版, 而在1.3 版之前, 它在该目标中存在明显的缺陷。它甚至没有试图保持周围的 "保持活力" (又名、持续的) 联系。服务器在每次请求后都天真地关闭了连接。
1.3 版中的新 aspnetserve. server 对象完全支持持久连接, 并随之引入了几个新属性:
maxconnect
此属性表示允许的最大同时连接数。一旦达到最高金额, 将拒绝额外的请求。
保持的 aliverequest出路
一个时间段 (以毫秒为单位), aspnetserve 将等待以前建立的连接上的后续通信。
ice (双关语的意思) 允许 aspnetserve 在后台处理请求。此外, 这允许请求处理, 而无需用户首先登录并启动 simpleserver ui。
ice 从一个 xml 文件读取它的配置, 该文件的架构是在 wiki 页面 "概要概述" 上定义的。
下面是 xml 文件的一个简单示例:
<?xml version="1.0" encoding="utf-8"?><s
erver xmlns="http://aspnetserve.googlecode.com/svn/tags/Release%201.3/aspNETserve/Configuration/Xml/aspNETserve.config.xsd"> <
application physicalpath="c:temp">
<domain name="www.example.com" virtualpath="/"></domain>
<endpoint ip="127.0.0.1" port="80"></endpoint>
<endpoint ip="127.0.0.1" port="443" secure="true"></endpoin
t> </application
></server>
asp. net mvc: 导览游
我们都读过什么是 mvc, 但它到底是如何工作的呢?是什么螺母和螺栓, 使 mvc 魔术发生?幸运的是, microsoft 已经向 asp. net mvc 发布了源代码, 我们可以阅读详细信息。但是, 如果你和我一样阅读源代码与真正了解应用程序的工作原理有很大的不同。幸运的是, 自从源代码发布后, 我们可以做的远不止于阅读, 我们可以使用调试器来逐步完成它。
visual studio 中的调试器对于现代开发人员来说是一个非常有用的工具。我经常使用调试器作为开发代码的第一个调试路由。有趣的是, 我们可以使用相同的调试器遍历 asp. net mvc, 以便更好地了解它的运行方式。
我们需要做的第一件事是将源代码下载到 asp. net mvc, 并在启用调试的情况下对其进行编译。源代码可以从它的 codeplex 页面下载。下载包含 visual studio 2008 项目。只需打开项目并进行重建。完成后, 您应该会在提取下载的源代码的文件夹中的 bin 目录中的目录中看到四个文件。
在这些文件中, 我们只对其中的两个感兴趣。System.Web.Mvc.dll 和 System.Web.Mvc.pdb。 请记下这些文件在您的计算机上的位置, 因为我们将需要添加对这些文件的引用。
在 visual studio 的新实例中, 允许创建新的 asp. net mvc 应用程序。我们需要做的第一件事是删除对 System.Web.Mvc 的引用。展开引用文件夹, 右键单击 System.Web.Mvc 并选择 "删除"。
删除 System.Web.Mvc 的引用后, 您现在需要将其添加回。只有这次, 我们将引用我们刚刚编译的 dll, 而不是引用 asp. net mvc 附带的 dll。通过右键单击引用文件夹并选择 "添加引用…", 您将获得浏览引用的选项。只需导航到我要求您记住之前的路径, 然后选择 System.Web.Mvc.dll 文件, 然后单击 "确定"。
现在, 我们都已准备好开始调试 asp. net mvc 的内部。对于启动器, 导航到预先生成的家庭控制器, 并在 index 方法的第一行上放置一个断点。 现在, 在启用调试的情况下启动站点。
完成所有编译并启动应用程序后, visual studio 实例应立即停止。
此时, 在 "调用堆栈" 窗口中, 您应该会看到 System.Web.MVC.DLL 的条目, 并且这些条目应为黑色 (而不是灰色)。这意味着 visual studio 具有需要向我们显示这些方法的源代码的调试信息。这正是我们所尝试的, visual studio 现在将我们都以与代码非常相似的方式逐步完成 asp. net mvc 代码。让我们从详细分析调用堆栈开始。
在调用堆栈中, 我们看到以下内容:
mvcapation.1. dll!MvcApplication1.Controllers.HomeController.Index () System.Web.Mvc.DLL!!!System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod (...) System.Web.Mvc.DLL!!!System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters.AnonymousMethod (...) System.Web.Mvc.DLL!!!System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter (...) System.Web.Mvc.DLL!!!System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters.AnonymousMethod () System.Web.Mvc.DLL!!!System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters (...) System.Web.Mvc.DLL!!!System.Web.Mvc.ControllerActionInvoker.InvokeAction (...) System.Web.Mvc.DLL!!!System.Web.Mvc.Controller.Execute (...) System.Web.Mvc.DLL!!!System.Web.Mvc.Controller.System.Web.Mvc.IController.Execute (...) System.Web.Mvc.DLL!!!System.Web.Mvc.MvcHandler.ProcessRequest (...) System.Web.Mvc.DLL!!!System.Web.Mvc.MvcHandler.ProcessRequest (...) System.Web.Mvc.DLL!!!System.Web.Mvc.MvcHandler.System.Web.IHttpHandler.ProcessRequest (...)
更新
我已经有一段时间没有提到任何关于 aspnetserve 的事情了, 所以我想现在是更新的时候了。自2007年12月上一次更新以来, 直到最近才有任何活动。在被大量的个人和职业义务分散注意力之间, 这个项目退居二线。
使用合同测试测试软件合同
合同, 无论是明示的还是隐含的, 都是设计工作软件系统的关键。c# 中显式协定的一个示例是接口的实现, 而隐含协定将是与所有业务对象具有默认构造函数的内容类似的内容。这两种类型的合同对于软件系统的成功至关重要, 但您如何测试和执行这些合同?
明确的合同通常由编译器强制执行, 并不像隐含合同那样脆弱。使用 ContractTest 测试框架, 您可以为许多常见的隐含合同编写测试用例。您可以将 ContractTest 断言直接合并到现有的单元测试中。对于下面的示例, 我将使用 nunit 语法, 但您可以使用大多数其他单元测试框架。
例如, 假设您要测试某个业务对象上是否存在可公开访问的默认构造函数。使用合同测试的这样的测试看起来就像。
使用合同测试. 断言; 使用 nunit. framework; 使用 mynamespace. 业务对象; [测试夹具] 公共类采样测试 { [测试] 公共空白试验 1 () { ContractAssert.Type.HasPublicDefaultConstructor<BizObjectA>();</BizObjectA> } }
nhibernate 配方属性
nhibernate 的一个经常被忽视的特点是公式属性的使用。公式属性是不映射到数据库中的列, 而是使用原始 sql 查询映射的属性。
公式在 nhibernate 映射文件中使用与普通属性相同的属性元素进行映射, 只需替换公式关键字的列关键字即可。
<property name="FormulaPropertyName" formula="SQL STATEMENT"></property>
基本思想是, 当 nhibernate 加载对象时, 它将同时颁发自定义 sql, 从而允许复杂的只读属性将其工作卸载到数据库中。
例如, 假设您有一个表示电子商务网站上订单的类。订单通常由行项目组成, 一个常见的问题是作为一个整体问订单 "你的小计是什么?" 在不权衡利弊的情况下, 假设您不想将小计作为字段存储在订单表中。
一个完全可以接受的解决方案是具有这样的只读属性:
公共十进制子总计 { 获取 { 十进制小总计 = 0; 在这里。线项目) { 小道达尔 + = 李。延长价格;即, 单位订购的时间单价。 } 返回小计; } }