<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_独舞风雪夜</title><subtitle type="text">破孩的技术文档</subtitle><id>http://feed.cnblogs.com/blog/u/33317/rss</id><updated>2010-07-05T01:51:30Z</updated><author><name>破孩</name><uri>http://www.cnblogs.com/poorboy/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/poorboy/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/33317/rss"/><entry><id>http://www.cnblogs.com/poorboy/articles/1561518.html</id><title type="text">跟我学MVC系列（Repository模式、LINQ、EF、IOC框架Castle、JQuery、AJAX）（六）（应用IOC模式）</title><summary type="text">前五篇已经把Models 介绍完啦，从今天开始我们要介绍&amp;#8220;V&amp;#8221;&amp;amp;"C"啦。现在我们还是从MVC的定义说起，其实MVC最大的好处就是M层（脱离V与C）可以独立单元测试，真正做到了数据层与表现层（晕，不知道有没有这个说法）的分离。所以，我们可以完全不考虑界面把M层完成。但是，现在的M层并不是已经定型。我们在写&amp;#8220;V&amp;#8221;与&amp;#8220;C&amp;#8221;...</summary><published>2010-07-05T01:44:00Z</published><updated>2010-07-05T01:44:00Z</updated><author><name>破孩</name><uri>http://www.cnblogs.com/poorboy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/poorboy/articles/1561518.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/poorboy/articles/1561518.html"/><content type="html">&amp;nbsp;前五篇已经把Models 介绍完啦，从今天开始我们要介绍&amp;#8220;V&amp;#8221;&amp;amp;"C"啦。现在我们还是从MVC的定义说起，其实MVC最大的好处就是M层（脱离V与C）可以独立单元测试，真正做到了数据层与表现层（晕，不知道有没有这个说法）的分离。所以，我们可以完全不考虑界面把M层完成。但是，现在的M层并不是已经定型。我们在写&amp;#8220;V&amp;#8221;与&amp;#8220;C&amp;#8221;的时候，如果发现还需要有新的功能，完全可以回过头来改动M层。其实，框架搭好啦，修改也是非常容易的。&lt;br /&gt;&#xD;
说明一下，我们现在暂不考虑权限控制，最后再来完成。&lt;br /&gt;&#xD;
闲话少说，我们现在就动工吧。&lt;br /&gt;&#xD;
现在我们又要用到一个新概念，那就是 DI和IOC，如果疑惑的&amp;#8220;哇，这是啥啊？&amp;#8221;，你可是要好好的百度谷歌一下啦。看看这个是否对你有帮助？&lt;a href="http://www.cnblogs.com/PeterWang/archive/2008/09/07/1277967.html" target="_blank"&gt;http://www.cnblogs.com/PeterWang/archive/2008/09/07/1277967.html&lt;/a&gt;&amp;nbsp; 摘自上面这个链接的一段话：&lt;br /&gt;&#xD;
&lt;em&gt;DI和IOC是一直很流行的架构设计思想和方法，IOC是将对象内部的依赖解藕 将原先内部的控制反转给了类之外 又称Dependence Injection 。IOC或DI的核心思想在于提供一个更加简单的机制来规定组件之间的依赖关系（一般涉及到对象的合作），并且在它们生命周期中对依赖关系进行管理。 IOC提供了这样的服务，使一个组件能够在它的生命周期中访问它的依赖和服务。总的来说，IOC能够被分解为两种字类型：依赖注入和依赖查找。从这个意义 上来说，当我们谈及DI的时候总是在谈IOC，但是当说到IOC的时候却不一定涉及DI. 需要进一步清楚知道他们的原理和理论请参考其它文章。&lt;br /&gt;&#xD;
还有一段来历不明的话，希望帮助你的理解：&lt;br /&gt;&#xD;
&lt;/em&gt;《两个个很形象的依赖注入的比喻》 &lt;br /&gt;&#xD;
&lt;em&gt;何谓控制反转（IoC = Inversion of Control），何谓依赖注入（DI = Dependency Injection）？一直都半懂不懂，今天看到两个比喻，觉得比较形象。 &lt;br /&gt;&#xD;
IoC，用白话来讲，就是由容器控制程序之间的关系，而非传统实现中，由程序代码直接操控。这也就是所谓"控制反转"的概念所在：控制权由应用代码中转到了外部容器，控制权的转移，是所谓反转。 &lt;br /&gt;&#xD;
正在业界为IoC争吵不休时，大师级人物Martin Fowler也站出来发话，以一篇经典文章《Inversion of Control Containers and the Dependency Injection pattern》为IoC正名，至此，IoC又获得了一个新的名字："依赖注入 （Dependency Injection）"。相对IoC 而言，"依赖注入"的确更加准确的描述了这种古老而又时兴的设计理念。从名字上理解，所谓依赖注入，即组件之间的依赖关系由容器在运行期决定，形象的来说，即由容器动态的将某种依赖关系注入到组件之中。 &lt;br /&gt;&#xD;
一： &lt;br /&gt;&#xD;
再看上例中，笔记本电脑与外围存储设备通过预先指定的一个接口（USB）相连，对于笔记本而言，只是将用户指定的数据发送到USB接口，而这些数据何去何从，则由当前接入的USB设备决定。在USB设备加载之前，笔记本不可能预料用户将在USB接口上接入何种设备，只有USB设备接入之后，这种设备之间的依赖关系才开始形成。 &lt;br /&gt;&#xD;
对应上面关于依赖注入机制的描述，在运行时（系统开机，USB 设备加载）由容器（运行在笔记本中的Windows操作系统）将依赖关系（笔记本依赖USB设备进行数据存取）注入到组件中（Windows文件访问组件）。这就是依赖注入模式在现实世界中的一个版本。 &lt;br /&gt;&#xD;
很多初学者常常陷入"依赖注入，何用之有？"的疑惑。想来这个例子可以帮助大家简单的理解其中的含义。依赖注入的目标并非为软件系统带来更多的功能，而是为了提升组件重用的概率，并为系统搭建一个灵活、可扩展的平台。将USB接口和之前的串/并、PS2接口对比，想必大家就能明白其中的意味。 &lt;br /&gt;&#xD;
二： &lt;br /&gt;&#xD;
首先想说说IoC（Inversion of Control，控制倒转）。这是spring的核心，贯穿始终。所谓IoC，对于spring框架来说，就是由spring来负责控制对象的生命周期和对象间的关系。这是什么意思呢，举个简单的例子，我们是如何找女朋友的？常见的情况是，我们到处去看哪里有长得漂亮身材又好的mm，然后打听她们的兴趣爱好、qq号、电话号、ip号、iq号&amp;#8230;&amp;#8230;&amp;#8230;，想办法认识她们，投其所好送其所要，然后嘿嘿&amp;#8230;&amp;#8230;这个过程是复杂深奥的，我们必须自己设计和面对每个环节。传统的程序开发也是如此，在一个对象中，如果要使用另外的对象，就必须得到它（自己new一个，或者从JNDI中查询一个），使用完之后还要将对象销毁（比如Connection等），对象始终会和其他的接口或类藕合起来。 &lt;br /&gt;&#xD;
那么IoC是如何做的呢？有点像通过婚介找女朋友，在我和女朋友之间引入了一个第三者：婚姻介绍所。婚介管理了很多男男女女的资料，我可以向婚介提出一个列表，告诉它我想找个什么样的女朋友，比如长得像李嘉欣，身材像林熙雷，唱歌像周杰伦，速度像卡洛斯，技术像齐达内之类的，然后婚介就会按照我们的要求，提供一个mm，我们只需要去和她谈恋爱、结婚就行了。简单明了，如果婚介给我们的人选不符合要求，我们就会抛出异常。整个过程不再由我自己控制，而是有婚介这样一个类似容器的机构来控制。Spring所倡导的开发方式就是如此，所有的类都会在spring容器中登记，告诉spring你是个什么东西，你需要什么东西，然后spring会在系统运行到适当的时候，把你要的东西主动给你，同时也把你交给其他需要你的东西。所有的类的创建、销毁都由spring来控制，也就是说控制对象生存周期的不再是引用它的对象，而是spring。对于某个具体的对象而言，以前是它控制其他对象，现在是所有对象都被spring控制，所以这叫控制反转。如果你还不明白的话，我决定放弃。&lt;br /&gt;&#xD;
&lt;/em&gt;对了，还有这个：&lt;a href="http://www.cnblogs.com/terrylee/archive/2006/04/17/377018.html" target="_blank"&gt;http://www.cnblogs.com/terrylee/archive/2006/04/17/377018.html&lt;/a&gt;&lt;a&gt;&lt;/a&gt;&lt;a&gt;&lt;/a&gt;&lt;br /&gt;&#xD;
为什么要IOC，还是为了降低耦合性。 &lt;br /&gt;&#xD;
好，我们现在就开始应用IOC模式啦！&#xD;
&lt;div&gt;我们已经在&amp;#8220;Service&amp;#8221;文件夹下建立了几个服务类（直接用于"C"的调用），为了在&amp;#8220;C&amp;#8221;中不与Service藕合，我可以利用IOC模式生做一个对象工厂，在这里使用.NET中的&amp;nbsp;&lt;span style="font-family: 'lucida grande'; font-size: 13px; line-height: normal; white-space: pre; "&gt;Castle（一种IOC框架），首先我们定义这个对象工厂的接口，我们在&amp;#8220;Models&amp;#8221;下定义&lt;span style="font-family: verdana; font-size: 14px; white-space: normal; line-height: 25px; "&gt;&lt;font face="'lucida grande'" size="3"&gt;&lt;span style="font-size: 13px; line-height: normal; white-space: pre;"&gt;IPBAccountServiceFactory 接口，&lt;/span&gt;&lt;/font&gt;&lt;span style="font-family: 'lucida grande'; font-size: 13px; line-height: normal; white-space: pre; "&gt;如下：&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;font face="'lucida grande'" size="3"&gt;&lt;span style="font-size: 13px; line-height: normal; white-space: pre; "&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;!--&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;&#xD;
http://www.CodeHighlighter.com/&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
--&gt;&lt;span style="color: #0000FF;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;PBAccount.Service;&lt;br /&gt;&#xD;
&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;namespace&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;PBAccount.Models&lt;br /&gt;&#xD;
{&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;interface&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;p&gt;&lt;/p&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;全部为只读，因为不用更改&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&#xD;
&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IAccountService&amp;nbsp;AccountService&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;get&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&amp;nbsp;}&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IAccountTypeService&amp;nbsp;AccountTypeService&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;get&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&amp;nbsp;}&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IUser&amp;nbsp;User&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;get&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&amp;nbsp;}&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&#xD;
}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;span  style="font-family: 'Courier New', 'courier new'; "&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('0d497b37-197d-4a46-9cf2-14ff7626a054')"&gt;&lt;img src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif"  id="code_img_opened_0d497b37-197d-4a46-9cf2-14ff7626a054" onclick="cnblogs_code_hide('0d497b37-197d-4a46-9cf2-14ff7626a054',event)" style="display:none"&gt;&lt;div id="cnblogs_code_open_0d497b37-197d-4a46-9cf2-14ff7626a054" &gt;&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #0000FF;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;System;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;PBAccount.Service;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Castle.Core;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Castle.Windsor;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Castle.MicroKernel.Registration;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;PBAccount.Repository;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;namespace&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;PBAccount.Models&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;PBAccountServiceFactory:IPBAccountServiceFactory&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;readonly&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;IWindsorContainer&amp;nbsp;container;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;PBAccountServiceFactory(IWindsorContainer&amp;nbsp;container,&amp;nbsp;LifestyleType&amp;nbsp;lifestyleType,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;dbconn)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;(container&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;==&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;throw&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;ArgumentNullException(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;container&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.container&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;container;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;.IsNullOrEmpty(dbconn))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;container.AddComponentLifeStyle&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;PBAccountEntities1&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;(lifestyleType);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;else&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;container.Register(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Component.For&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;PBAccountEntities1&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;()&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.Parameters(Parameter.ForKey(System.Configuration.ConfigurationSettings.AppSettings[&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;connectionStrings&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;]).Eq(dbconn)).LifeStyle.Is(lifestyleType));&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;container.AddComponentLifeStyle&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;IAccountRepository,&amp;nbsp;AccountResposity&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;(lifestyleType);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;container.AddComponentLifeStyle&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;IAccountTypeRepository,&amp;nbsp;AccountTypeResposity&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;(lifestyleType);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;container.AddComponentLifeStyle&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;IUserRepository,&amp;nbsp;UserResposity&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;(lifestyleType);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;container.AddComponentLifeStyle&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;IAccountService,&amp;nbsp;AccountService&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;(lifestyleType);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;container.AddComponentLifeStyle&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;IAccountTypeService,&amp;nbsp;AccountTypeService&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;(lifestyleType);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;container.AddComponentLifeStyle&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;IUserService,&amp;nbsp;UserService&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;(lifestyleType);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;container.AddComponentLifeStyle&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;IEntityFactory,&amp;nbsp;EntityFactory&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;(lifestyleType);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;PBAccountServiceFactory(IWindsorContainer&amp;nbsp;container,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;dbconn)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;(container,&amp;nbsp;LifestyleType.Singleton,&amp;nbsp;dbconn)&amp;nbsp;{&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;PBAccount.Service.IAccountService&amp;nbsp;AccountService&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;get&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;container.Resolve&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;IAccountService&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;();&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;PBAccount.Service.IAccountTypeService&amp;nbsp;AccountTypeService&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;get&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;container.Resolve&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;IAccountTypeService&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;();&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;IUserService&amp;nbsp;UserService&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;get&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;container.Resolve&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;IUserService&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;();&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;这样，&amp;nbsp;我们就实现了依赖注入啦。里面具体不明白的名字百度知道！&lt;/p&gt;&lt;p&gt;至此我们已经完成了MVC中的M，下篇我们开始C和V。&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span style="font-family: 'lucida grande'; font-size: 13px; line-height: normal; white-space: pre; "&gt; &lt;/span&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/poorboy/aggbug/1561518.html?type=2" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/poorboy/articles/1561518.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/poorboy/archive/2009/09/06/1561135.html</id><title type="text">跟我学MVC系列（Repository模式、LINQ、EF、IOC框架Castle、JQuery、AJAX）（五）Models（ORM、Repository模式、分页）</title><summary type="text">现在是凌晨12点半拉，夜深人静，趁我还没有睡意，现在继续。上篇我们完成了Resposity 的很大一部分啦，现在我们需要创建一个实体工厂，什么是实体工厂呢？就是能够生产实体的工厂呗，呵呵。你看看代码就知道啦。我们在Models文件夹下建立一个EntityFactory.cs 类和它的接口类IEntityFactory.cs，代码如下：</summary><published>2009-09-06T03:25:00Z</published><updated>2009-09-06T03:25:00Z</updated><author><name>破孩</name><uri>http://www.cnblogs.com/poorboy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/poorboy/archive/2009/09/06/1561135.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/poorboy/archive/2009/09/06/1561135.html"/></entry><entry><id>http://www.cnblogs.com/poorboy/archive/2009/09/05/1560661.html</id><title type="text">跟我学MVC系列（Repository模式、LINQ、EF、IOC框架Castle、JQuery、AJAX）（四）Models（ORM、Repository模式、分页）</title><summary type="text">跟我学MVC系列（Repository模式、LINQ、EF、IOC框架Castle、JQuery、AJAX）（三）Models（ORM、Repository模式、分页） (9-3 23:00) 跟我学MVC系列（Repository模式、LINQ、EF、IOC框架Castle、JQuery、AJAX）（二）Models（ORM） (9-3 10:43) 跟我学MVC系列（Repository模式、...</summary><published>2009-09-04T17:17:00Z</published><updated>2009-09-04T17:17:00Z</updated><author><name>破孩</name><uri>http://www.cnblogs.com/poorboy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/poorboy/archive/2009/09/05/1560661.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/poorboy/archive/2009/09/05/1560661.html"/></entry><entry><id>http://www.cnblogs.com/poorboy/archive/2009/09/03/1559925.html</id><title type="text">跟我学MVC系列（Repository模式、LINQ、EF、IOC框架Castle、JQuery、AJAX）（三）Models（ORM、Repository模式、分页）</title><summary type="text">跟我学MVC系列（Repository模式、LINQ、EF、IOC框架Castle、JQuery、AJAX）（二）Models（ORM） (9-3 10:43) 跟我学MVC系列（Repository模式、LINQ、EF、IOC框架Castle、JQuery、AJAX）（一）数据库建模 (9-1 00:04) 珍惜他人劳动成果，转载请注明出处，谢谢！上篇我们已经构建好了EF模型，本篇我们在这个模型...</summary><published>2009-09-03T15:00:00Z</published><updated>2009-09-03T15:00:00Z</updated><author><name>破孩</name><uri>http://www.cnblogs.com/poorboy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/poorboy/archive/2009/09/03/1559925.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/poorboy/archive/2009/09/03/1559925.html"/></entry><entry><id>http://www.cnblogs.com/poorboy/archive/2009/09/03/1559179.html</id><title type="text">跟我学MVC系列（Repository模式、LINQ、EF、IOC框架Castle、JQuery、AJAX）（二）Models（ORM）</title><summary type="text">跟我学MVC系列（Repository模式、LINQ、EF、IOC框架Castle、JQuery、AJAX）（一）数据库建模跟我学MVC系列（Repository模式、LINQ、EF、IOC框架Castle、JQuery、AJAX）（三）Models（ORM、Repository模式、分页）我们将以实例为主，关于MVC的具体理论请在博客园中搜索，到处都有。在设计好数据库之后，打开VS2008,选择...</summary><published>2009-09-03T02:43:00Z</published><updated>2009-09-03T02:43:00Z</updated><author><name>破孩</name><uri>http://www.cnblogs.com/poorboy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/poorboy/archive/2009/09/03/1559179.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/poorboy/archive/2009/09/03/1559179.html"/></entry><entry><id>http://www.cnblogs.com/poorboy/archive/2009/09/01/1557747.html</id><title type="text">跟我学MVC系列（Repository模式、LINQ、EF、IOC框架Castle、JQuery、AJAX）（一）数据库建模</title><summary type="text">跟我学MVC系列（Repository模式、LINQ、EF、IOC框架Castle、JQuery、AJAX）（二）Models（ORM） 跟我学MVC系列（Repository模式、LINQ、EF、IOC框架Castle、JQuery、AJAX）（三）Models（ORM、Repository模式、分页）好久没有更新拉，整天在博客园里混，没有一点自己的东西，老是有点心虚。实际上，想写点东西的想法我...</summary><published>2009-08-31T16:04:00Z</published><updated>2009-08-31T16:04:00Z</updated><author><name>破孩</name><uri>http://www.cnblogs.com/poorboy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/poorboy/archive/2009/09/01/1557747.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/poorboy/archive/2009/09/01/1557747.html"/></entry><entry><id>http://www.cnblogs.com/poorboy/archive/2008/08/05/1260973.html</id><title type="text">.NET 中的 委托与事件 （转）</title><summary type="text">来自：http://www.cnblogs.com/yyw84/archive/2006/12/27/604544.html一、什么是委托 下面引用自 MSDN委托类型声明的格式如下：publicdelegatevoidTestDelegate(stringmessage);delegate 关键字用于声明一个引用类型，该引用类型可用于封装命名方法或匿名方法。委托类似于 C++ 中的函数指针；但是...</summary><published>2008-08-05T06:56:00Z</published><updated>2008-08-05T06:56:00Z</updated><author><name>破孩</name><uri>http://www.cnblogs.com/poorboy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/poorboy/archive/2008/08/05/1260973.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/poorboy/archive/2008/08/05/1260973.html"/></entry><entry><id>http://www.cnblogs.com/poorboy/archive/2008/08/01/1258244.html</id><title type="text">委托、事件与Observer设计模式 </title><summary type="text">引自:http://blog.csdn.net/lynnlin1122/archive/2008/06/21/2573498.aspx委托、事件与Observer设计模式 范例说明　　上面的例子已不足以再进行下面的讲解了，我们来看一个新的范例，因为之前已经介绍了很多的内容，所以本节的进度会稍微快一些：　　假设我们有个高档的热水器，我们给它通上电，当水温超过95度的时候：1、扬声器会开始发出语音，告...</summary><published>2008-08-01T07:55:00Z</published><updated>2008-08-01T07:55:00Z</updated><author><name>破孩</name><uri>http://www.cnblogs.com/poorboy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/poorboy/archive/2008/08/01/1258244.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/poorboy/archive/2008/08/01/1258244.html"/></entry><entry><id>http://www.cnblogs.com/poorboy/archive/2008/07/31/1257264.html</id><title type="text">设计模式(转)</title><summary type="text">来自:http://www.itisedu.com/phrase/200603061631585.html设计模式因业务需要，&amp;#8220;中科永联&amp;#8221;正式更名为&amp;#8220;中程在线&amp;#8221;，欢迎大家浏览新网站&amp;#8220;中程在线信息产业培训网&amp;#8221;中科永联高级技术培训中心（www.itisedu.com） 设计模式（Design pattern）是一套被反复使用、多数...</summary><published>2008-07-31T06:33:00Z</published><updated>2008-07-31T06:33:00Z</updated><author><name>破孩</name><uri>http://www.cnblogs.com/poorboy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/poorboy/archive/2008/07/31/1257264.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/poorboy/archive/2008/07/31/1257264.html"/></entry><entry><id>http://www.cnblogs.com/poorboy/archive/2008/07/31/1257079.html</id><title type="text">设计模式概述(转)</title><summary type="text">来自:http://www.cnblogs.com/baiye7223725/archive/2007/07/28/834963.html设计模式从本质上说是一种规则，从形式上说，分为创建型、结构型、行为型。 　　设计模式的应用是为了实现软件设计中的几个原则，其中一个重要原则是：减少模块之间的耦合程度。为了确保这个目的，在设计一个类时，要针对接口，而非实现。（Programming to an I...</summary><published>2008-07-31T02:24:00Z</published><updated>2008-07-31T02:24:00Z</updated><author><name>破孩</name><uri>http://www.cnblogs.com/poorboy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/poorboy/archive/2008/07/31/1257079.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/poorboy/archive/2008/07/31/1257079.html"/></entry></feed>
