2015年5月13日
摘要: Asp.Net Mvc里有一个叫做Area的技术,就是可以把不同逻辑组件的controller, view等放到不同的文件夹里。比如所有管理相关的都放到Admin area里。其实之前我一直对这个功能不太感冒,并不觉得能解决什么大问题,如果项目规模较大的话,肯定是很多开发协同开发,这时候很大的一个问... 阅读全文
posted @ 2015-05-13 17:18 Jason Li 阅读(656) 评论(0) 推荐(0) 编辑
  2015年5月12日
摘要: 这几天在学习Asp.Net 5,现在文档以及博客之类的资料实在太少了,不看源码几乎举步维艰,好在全都是开源的,看看微软的代码也获益良多。看到DependencyInjection的代码里除了默认的容器之外,还提供了对NInject, Castle, Unity, AutoFac等第三方IoC容器的支... 阅读全文
posted @ 2015-05-12 20:29 Jason Li 阅读(800) 评论(1) 推荐(1) 编辑
  2011年4月20日
摘要: 在开发Silverlight程序的时候,经常需要在不同的组件间进行通信。比如点击一个button,可能就需要改变另一个控件的内容。比较直接的办法是使用事件,当然使用MVVM的时候也可以使用command,还可以定义一些全局的变量来保存一些信息等。Prism提供了几种用于组件间通信的途径,可以使用RegionContext使不同的视图共享数据,也可以借助于容器的力量来使用共享的service来进行通信,或者使用command等。除此之外,Prism还提供了一种基于事件的多播发布/订阅方式的通信机制,使不同的组件之间能够以一种松散耦合的方式来进行通信。这就是本文要介绍的事件聚合(Event Agg 阅读全文
posted @ 2011-04-20 22:20 Jason Li 阅读(7674) 评论(8) 推荐(5) 编辑
  2011年2月10日
摘要: 在Prism之Region(1)中,介绍了一些Prism中页面组织以及切换的方式。这一篇将以一个很简单的示例程序来实践一下。源码下载下面是效果图:先说Log,Prism内置了ILogFacade接口,在Prism提供的QuickStart项目里的Modularity中,有一个CallbackLogger,这里我们直接拿过来使用。然后在PrismRegionShell中放一个TextBox,将log的内容显示在这个TextBox中。值得一提的是,为了让输出新log的直接显示出来,需要将TextBox的滚动条滚动到最下面。这里采用的是如下方法:然后说一下左边的导航区。这里放置了一个ItemsCon 阅读全文
posted @ 2011-02-10 13:25 Jason Li 阅读(7005) 评论(6) 推荐(6) 编辑
  2011年1月31日
摘要: Prism可以帮助我们开发模块化程序,将程序分割成一个个独立的Module,分别进行开发。然后在程序运行的时候,将各个Module组合到一起,为程序提供各种各样的功能。通常来说,Module是一些视图和功能的集合,那么就需要一种办法来将这些视图以某种形式,在特定的时间展现出来。Prism通过Shell + Region来组织视图的布局,完成视图间的转换等。如上图所示,Shell相当于ASP.NET中的母版页,它定义了页面的布局、主题等。其中的导航区和内容区是预留出来的需要进行填充内容的部分,也就是Region,起到占位符的作用,程序会在运行时动态地向Region中填充内容。那么如何将一个区域定 阅读全文
posted @ 2011-01-31 11:20 Jason Li 阅读(13684) 评论(7) 推荐(12) 编辑
  2011年1月20日
摘要: Prism的核心功能之一就是支持模块化应用程序开发(Modular Application Development),并且在运行时对各个模块进行动态管理。使用Prism进行模块化开发首先要了解几个概念:1.Module: Module是一些逻辑上相关的程序集或者资源文件的集合,在Silverlight程序中通常以xap文件为单位存在。而每一个Module中都需要有一个负责进行初始化工作以及与系统进行集成的角色,它需要实现IModule接口。IModule接口中只有一个Initialize方法,一方面这个接口将这个工程标记为一个Module,另一方面你可以在Initialize方法中实现一些逻辑 阅读全文
posted @ 2011-01-20 14:04 Jason Li 阅读(11109) 评论(9) 推荐(8) 编辑
  2011年1月18日
摘要: 在程序中使用框架必然要有一个切入点,框架会在这里进行初始化,处理相关配置信息等。在Prism中扮演这一角色的就是Bootstrapper。 Prism提供了一个抽象基类Bootstrapper,这个类里面包含了包含了许多空的虚方法,可以重写它们添加自己的逻辑。这个基类与任何容器无关,所以可以通过继承它来实现基于特定容器的Bootstrapper,不过通常我们大可不必这样做,因为Prism默认提供了两个基于特定容器的Bootstrapper——UnityBootstrapper和MefBootstrapper,分别使用Unity和Mef来实现依赖注入。而我们需要做的工作就是在这两个类之间选择一个 阅读全文
posted @ 2011-01-18 09:56 Jason Li 阅读(12492) 评论(2) 推荐(6) 编辑
  2011年1月13日
摘要: Prism是由微软Patterns & Practices团队开发的项目,目的在于帮助开发人员构建松散耦合的、更灵活、更易于维护并且更易于测试的WPF应用或是Silverlight应用以及Windows Phone 7应用。使用Prism可以使程序开发更趋于模块化,整个项目将由多个离散的、松耦合的模块组成,而各个模块又可以又不同的开发者或团队进行开发、测试和部署。目前Prism的最新版本是Prism 4,于2010年11月12日发布。Prism有很完整的文档以及丰富的示例程序。在这里我们仅针对于Silverlight程序的开发。在下载Prism安装包并安装完成后,会在目标文件夹中发现很多文件。 阅读全文
posted @ 2011-01-13 15:01 Jason Li 阅读(46784) 评论(52) 推荐(22) 编辑
  2010年12月31日
摘要: 今天要实现一个DataGrid的Select All功能。查了一下,多是用EventHandler完成的,看起来觉得有点乱,所以自己写了一个。代码很简单Xaml本来打算在DataGridHeader的DataTemplate里直接绑定IsSelectAll了,但是Debug后发现没有DataContext。后来又使用sdk:DataGridTemplateColumn Header="{Binding XXX}" / 这种方法,倒是有DataContext,但是是个Binding类型,不起作用。最后找到了上面的方法。虽然经常用ElementName属性,但是从没这么用过。感觉很奇妙。下面是 阅读全文
posted @ 2010-12-31 14:34 Jason Li 阅读(2437) 评论(4) 推荐(5) 编辑
  2010年7月9日
摘要: 今天在写代码的时候遇到这样一个问题:自定义了一个类,为了在对两个实例比较时方便,所以重载了==运算符,当然也同样重载了!=运算符。在测试的时候却出现了stack overflow的问题。 代码如下(当然不是真正的代码,但是能说明问题): Main方法如下: 运行代码会发现直接死掉,debug会发现是stack overflow。仔细看看代码,死的有理。。。 因为重载了==运算符,所以在判断if (... 阅读全文
posted @ 2010-07-09 21:12 Jason Li 阅读(556) 评论(3) 推荐(2) 编辑