阅读: 2 评论: 0 作者: geff zhang 发表于 2010-02-07 17:03 原文链接 在.NET上现在存在许多的 依赖注入容器 , 我也在实践中使用过 Castle Windsor 、 StructureMap 、 Autofac 、 Unity 。 这些容器的简要介绍可以参看: IoC in .NET part 1: Autofac IoC in .NET part2: StructureMap IoC in .NET part 3: Ninject 2 beta IoC in .NET part4: Spring.NET IoC in .NET part 5: Using CastleWindsor container IoC Containers in .NET part 6: Unity Container 这里主要介绍一下Autofac,Autofac和其他容器的不同之处是它和C#语言的结合非常紧密,在使用过程中对你的应用的侵入性几乎为零,更容易与第三方的组件集成。Autofac的主要特性如下: 灵活的组件实例化:Autofac支持自动装配,给定的组件类型Autofac自动选择使用构造函数注入或者属性注入,Autofac还可以基于lambda表达式创建实例,这使得容器非常灵活,很容易和其他的组件集成。 var defaultLog = new ConsoleLog(); builder.Register(c => new Connection(){ Log = c.ResolveOptional<ILog>() ?? defaultLog }); 大家知道lambda表达式并不是在声明的时候的执行的,只有等到容器的 Resolve...
和传统属性的区别在哪里,为什么要搞出这样一个DependencyProperty呢? 内存使用量。 我们设计控件,不可避免的要设计很多控件的属性,高度,宽度等等,这样就会有大量(私有)字段的存在,一个继承树下来,低端的对象会无法避免的膨胀。而外部通过GetValue,SetValue暴露属性,内部维护这样一个EffectiveValueEntry的数组,顾名思义,只是维护了一个有效的、设置过值的列表,可以减少内存的使用量。 传统属性的局限性。 这个有很多,包括一个属性只能设置一个值,不能得到变化的通知,无法为现有的类添加新的属性等等。 在 MSDN 中,提到当你有下面四种情况时,应该考虑使用DependencyProperty: 您希望可在样式中设置此属性。 您希望此属性支持数据绑定。 您希望此属性支持经过动画处理的值。 您希望 Silverlight 属性系统在属性系统本身、环境或用户执行的操作或者读取并使用样式而更改了属性以前的值时进行报告。您的属性可以指定在每次属性系统确定属性值已被明确更改时将调用的回调方法。 一个Silverlight中创建 DependencyProperty 的例子 using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System...
阅读: 4 评论: 0 作者: geff zhang 发表于 2010-02-03 15:40 原文链接 各浏览器的userAgent很乱,具体可参看cnbeta上文章 译稿:UserAgent的历史变迁 。 IE 而IE各个版本典型的userAgent如下: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2) Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Mozilla/4.0 (compatible; MSIE 5.0; Windows NT) 其中,版本号是MSIE之后的数字。 Firefox Firefox几个版本的userAgent大致如下: Mozilla/5.0 (Windows; U; Windows NT 5.2) Gecko/2008070208 Firefox/3.0.1 Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070309 Firefox/2.0.0.3 Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070803 Firefox/1.5.0.12 其中,版本号是Firefox之后的数字。 Opera Opera典型的userAgent如下: Opera/9.27 (Windows NT 5.2; U; zh...
阅读: 9 评论: 0 作者: geff zhang 发表于 2010-02-02 11:34 原文链接 Web 部署工具简化了 IIS Web 服务器、Web 应用程序和网站的迁移、管理和部署。管理员可以结合使用命令行脚本和 Web 部署工具来同步 IIS 6.0 和 IIS 7.0 服务器,或者将 IIS 6.0 服务器迁移到 IIS 7.0。使用 Web 部署工具,管理员和委派用户还可以通过 IIS 管理器将 ASP.NET 和 PHP 应用程序部署到 IIS 7.0 服务器。 轻松地在 IIS 6.0 与 IIS 7.0 之间迁移 Web 应用程序 通过在开始迁移之前确定不兼容性和预览建议的更改,简化了 IIS 6.0 到 IIS 7.0 迁移的规划。提前了解任何潜在问题便有机会采取更正措施并简化迁移过程。 有效同步服务器场 使用 Web 部署工具,您可以检测源内容与目标内容之间的差异,并仅传输那些需要同步的更改,从而在 IIS 7.0 服务器场中有效地同步站点、应用程序或服务器。此工具自动确定要为特定站点同步的配置、内容、数据库和证书,从而简化同步过程。除了默认行为外,您还可以选择指定要同步的其他提供程序,包括 COM、GAC 和注册表设置。 更轻松地打包、存档和部署 Web 应用程序 使用 Web 部署工具,可以打包包括 SQL 数据库在内的已安装 Web 应用程序的配置和内容,并将这些包用于存储或重新部署。使用 IIS 管理器,无需管理权限即可部署这些包。此工具还与 Visual Studio 2010 集成,帮助开发人员简化 Web 应用程序在 Web 服务器上的部署。 下载: http://www.microsoft.com/downloads/details...
前一篇博客 IP to Integer 提供的 SQL 函数是 IP 转换成 Integer 的方法。 Integer 的最大值为: 2147483647(2^31 - 1)。按照 IP 转换成整数的算法,会算出来大于这个值的,所以之前提供的 IP 转换成 Integer 的方法会算出负值。 下面是 IP to BigInt 的转换算法, 这时候运算就不会小于零。 CREATE FUNCTION dbo.ipStringToBigInt ( @ip CHAR (15) ) RETURNS bigint AS BEGIN DECLARE @rv bigint , @o1 bigint , @o2 INT , @o3 INT , @o4 INT SELECT @o1 = CONVERT ( INT , PARSENAME(@ip, 4)), @o2 = CONVERT ( INT , PARSENAME(@ip, 3)), @o3 = CONVERT ( INT , PARSENAME(@ip, 2)), @o4 = CONVERT ( INT , PARSENAME(@ip, 1)) IF (@o1 BETWEEN 0 AND 255) AND (@o2 BETWEEN 0 AND 255) AND (@o3 BETWEEN 0 AND 255) AND (@o4 BETWEEN 0 AND 255) BEGIN SET @rv = (@o1 * 16777216) + (@o2 * 65536) + (@o3 * 256) + (@o4) END ELSE SET @rv = -1 RETURN @rv END go CREATE FUNCTION dbo.ipBigIntToString...
阅读: 0 评论: 0 作者: geff zhang 发表于 2010-02-01 20:24 原文链接 需要评估SharePoint的兄弟们有福了,微软提供了Office 2010 and SharePoint 2010 的VHD版本,从说明来看这是一个Hyper-V的虚拟机,还需要至少8G的内存,下载地址: http://www.microsoft.com/downloads/details.aspx?FamilyID=0c51819b-3d40-435c-a103-a5481fe0a0d2&displaylang=en 评论: 0 查看评论 发表评论 最新新闻: · 人民网微博2月1日起开放公测 (2010-02-01 18:41) · 苹果为何称谷歌“不作恶”是扯淡? (2010-02-01 18:14) · 要速度更要方便!20款实用Chrome插件推荐 (2010-02-01 18:09) · 消费电子领域十年间十大技术趋势 (2010-02-01 17:48) · 评论:移动互联网平台到底应该多开放 (2010-02-01 17:46) 编辑推荐: 传Facebook重写PHP运行库,PHP将大大加速 网站导航: 博客园首页 个人主页 新闻 闪存 小组 博问 社区 知识库 Read More...
有时候我们要判断某个IP是否在某个段内,如何实现呢? 一个简单办法就是把IP转换成Integer,然后判断整数是否在某个范围内就可以实现这个判断。 转换的算法如下: 比如我们要转换的IP为: 058.062.042.000 First Octet: 058 Second Octet: 062 Third Octet: 042 Fourth Octet: 000 计算公式如下: (first octet * 256³) + (second octet * 256²) + (third octet * 256) + (fourth octet) = (first octet * 16777216) + (second octet * 65536) + (third octet * 256) + (fourth octet) = (058 * 16777216) + (062 * 65536) + (042 * 256) + (000) = 977152512 网上有现成的服务,比如下面这个地址: http://www.aboutmyip.com/AboutMyXApp/IP2Integer.jsp SQL Server 的一个例子如下: CREATE FUNCTION dbo.ipStringToInt ( @ip CHAR (15) ) RETURNS INT AS BEGIN DECLARE @rv INT , @o1 INT , @o2 INT , @o3 INT , @o4 INT , @base INT SELECT @o1 = CONVERT ( INT , PARSENAME(@ip, 4)), @o2 = CONVERT ( INT...
最近在学习MatrixTransform,发现对之前学的矩阵乘法竟然忘的一干二净,下面就是这个基础知识的整理。 矩阵加法 通常的矩阵加法被定义在两个相同大小的矩阵。两个m×n矩阵A和B的和,标记为A+B,一样是个m×n矩阵,其内的各元素为其相对应元素相加后的值。例如: 也可以做矩阵的减法,只要其大小相同的话。A-B内的各元素为其相对应元素相减后的值,且此矩阵会和A、B有相同大小。例如: 矩阵乘法 若给出一矩阵 A 及一数字 c,可定义标量积 cA,其中 (cA)[i, j] = cA[i, j]。 例如: 设A和B是两个给定如下的矩阵: 则 举例来说: MatrixTransform 的矩阵运算 假设我们有个点(X,Y) ,我们使用 MatrixTransform 要把它转换成新的点(X 1 ,Y 1 ),则公式为: X 1 = X *M11 + Y *M21+ OffsetX Y 1 = X *M12 + Y *M22+ OffsetY 在Silverlight 和 WPF 中,对应的Xaml 如下: < MatrixTransform Matrix = "M11, M12, M21, M22, OffsetX, OffsetY" /> 从矩阵运算的角度,就是如下矩阵运算: 上述表达式中,乘号左面矩阵的列为为系数表,右边矩阵为向量表。例如,第一行是[X Y 1],因此将X乘上第一个向量,Y乘上第二个向量,1则乘上第三个向量。 参考资料: 矩阵 http://zh.wikipedia.org/zh-cn/%E7%9F%A9%E9%98%B5...
阅读: 33 评论: 0 作者: geff zhang 发表于 2010-01-26 20:32 原文链接 是开始学习IronPython 的时候了 文章里谈到了“IronPython 2.6提供了新特性clrtype,允许程序员用纯IronPython代码提供property、attribute等CLR类型信息。这样IronPython代码就可以无缝地与Sliverlight、WCF等框架集成。”我们就用clrtype来看看怎么承载WCF服务和消费WCF服务。WCF的契约需要定义接口,这是目前IronPython 尚未支持的功能,所以我们先用C#定义个一个WCF的契约: using System; using System.Collections.Generic; using System.ServiceModel; namespace TestServiceInterface { /// <summary> /// Description of MyClass. /// </summary> [ServiceContract] public interface ImyService { [OperationContract] string GetData(int value); } } 编译成一个程序集TestServiceInterface.dll, 然后在IronPython中实现WCF服务myWcfService.myService,代码如下: import clr import clrtype clr.AddReference('System.ServiceModel') clr.AddReference...
我们使用Blend 设计WPF或者Silverlight 界面是,会看到有两个选择工具,下面就是他们的对比。 选择工具 路径选择工具 截图 英文名称 Selection Direct Selection 作用 在美工板上选择要修改的形状、路径和对象。跟普通的选择鼠标一样 显示在绘制路径上的节点,并对各个节点进行操作。 如下图所示,选择这个元素的整体 对非Path对象来说,就是选择整体,对Path对象来说如下,可以选择Path的每一个关键点,并对他们进行设置。 对路径的处理 鼠标操作 如上图所示,移动对象的位置。 当鼠标在Path上移动时,可能是下面五种鼠标,对应的是五种功能。 移动点指针,用于 使路径上的点显示切线图柄 方法就是: 单击路径上的点 或者 用于 移动路径上的点 方法就是: 拖动路径上的点; 移动段指针,用于 使路径上两点之间的段显示切线图柄 方法就是 单击路径段 或者 用于 移动路径上两点之间的段 方法就是 拖动路径段; 移动切线指针,用于 更改路径上的点的切线角度 方法就是 单击路径上的点或线段以显示切线图柄,然后拖动其中一个切线端点 转换点指针,用于 使点成为锐角,或者将切线的长度缩短为零 或者 使任何锐角变得平滑(或者,如果已经平滑,则通过单击点来更改曲线的角度); 方法就是: 悬停在某个点上,按住 Alt,然后拖动此点 转换段指针,用于 将曲线段改为直线段 或者 获取一条段,并使其弯曲通过指针位置, 方法就是 : 悬停在路径中的某条线段上,按住 Alt,然后拖动线段; 也可以 独立于另一边调整切线的一端 ,方法就是: 直接选择一个点或一条线段,按住 Alt,然后拖动一个切线端点。 注:若要添加或删除现有路径上的点,或者连接两个现有路径...
More Posts
Next page »