这个好像、也许、或许、大概、应该、Maybe真的可以算是传说中的Spring.Net了吧

以前写过一篇名叫”这个好像、也许、大概、应该、Maybe真的算是传说中的面向接口编程了吧“的文章,当时好像是在评论里许诺以后会有一篇叫”文章这个好像、也许、大概、应该、Maybe真的算是传说中的Spring.Net吧“。然后,现在在我们节日的时候,大抵可以算是来承兑诺言的吧。

先介绍一下IoC吧。它呢,中文名字是控制反转。英文是Inversion of Control。Spring.Net就是IoC的一个框架。原本的对象是由类来管理的,比如让创建一个此类的实例,我们会new此类。有了IoC我们就不需要用到这个类去new了,或者说是不用这个类去管理它相应的对象了。而是交给了我们的IoC框架来管理这些了。这样不用类去管理的话,就可以做到松耦合。刘冬先生写过Spring.Net的一个系列,感兴趣的朋友可以看一下的。

我在这里就写一个小小的案例吧。

最开始,先创建一个窗体的应用程序,在窗体上创建一个按钮并且将窗体应用程序的输出类型改成控制台应用程序(如若不改成控制台应用程序,那么将无法输出我们想要的结果)。建立一个类和一个接口。写类和接口,是为后面调用实例做准备。

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace SpringNetStudy1024
 8 {
 9     class Mutudu:IMutudu
10     {
11         public void Show()
12         {
13             Console.WriteLine( "小杜成功的写了一个Spring.Net的案例" );
14         }
15     }
16 }

Mutudu

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace SpringNetStudy1024
 8 {
 9     interface IMutudu
10     {
11         void Show();
12     }
13 }

IMutudu

因为我们是需要用到第三方的类库的。那么我们得先把Spring.Net第三方的类库先添加到我们的项目当中来。我们就在项目中新建立一个文件夹,将我们需要的第三方类库拷贝进来。然后项目添加对这些第三方类库的引用。我们必须要引用的有两个dll,一个是Common.Logging.dll。另外一个是Spring.Core.dll.这两个是必不可少的。

如若少了,则会这样(我曾经少引用了一个):

第三方类库我们是引用进来了。我们说了,类是交给我们的IoC容器来管理的,那么我们的IoC容器呢?我们需要得到IoC容器,然后IoC容器才好去管理吧。关于这个嘛,我们是通过配置初始化IoC容器。也就是初始化IApplicationContext。个人认为这个类的地位是有点类似于EF里的上下文的,有点承上启下的意思。那么修改一下App.Config吧。

 1 <?xml version="1.0" encoding =" utf-8" ?>
 2 <configuration>
 3           < configSections>
 4                    < sectionGroup name =" spring" >
 5                              < section name =" context" type="Spring.Context.Support.ContextHandler, Spring.Core" />
 6                              < section name =" objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
 7                    </ sectionGroup>
 8           </ configSections>
 9           < spring>
10                    < context>
11                              < resource uri =" config://spring/objects"/>
12                    </ context>
13                    < objects xmlns =" http://www.springframework.net">
14                              < description>An  example that demonstrates simple IoC features.</description>
15                    </ objects>
16           </ spring>
17 </configuration>

App.Config

另外需要说一下的就是在配置文件中,我们是通过objects节点的子节点来配置程序中用到的对象的,当然,object节点其是位于objects(有s)节点下的。比如我们现在需要把我们那会写的类配置进来,那么就在objects节点下配置object节点:

 1 <? xml version =" 1.0" encoding =" utf-8" ?>
 2 < configuration>
 3           < configSections >
 4                    < sectionGroup name =" spring" >
 5                              < section name =" context" type =" Spring.Context.Support.ContextHandler, Spring.Core" />
 6                              < section name =" objects" type =" Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
 7                    </ sectionGroup >
 8           </ configSections >
 9           < spring >
10                    < context >
11                              < resource uri =" config://spring/objects "/>
12                    </ context >
13                    < objects xmlns =" http://www.springframework.net ">
14                              < description >An  example that demonstrates simple IoC features.</ description>
15                              <!-- 下面就是将类交给窗口管理的配置代码,仅此一行。 -->
16                              < object name =" Mutudu"       type =" SpringNetStudy1024.Mutudu, SpringNetStudy1024" >    </ object>
17                    </ objects >
18           </ spring >
19 </ configuration>
20  

类让IoC来管理吧。

通过"IApplicationContext ctx = ContextRegistry .GetContext();"这行代码拿到的就是配置好的object下节点我们配置好的对象。这行代码蛮关键的。

那么,我们看一下按钮点击事件里的代码:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Data;
 5 using System.Drawing;
 6 using System.Linq;
 7 using System.Text;
 8 using System.Threading.Tasks;
 9 using System.Windows.Forms;
10 using Spring.Context;
11 using Spring.Context.Support;
12
13 namespace SpringNetStudy1024
14 {
15     public partial class Form1 : Form
16     {
17         public Form1()
18         {
19             InitializeComponent();
20         }
21
22         private void PowerOfIoC_Click( object sender, EventArgs e)
23         {
24             //这里返回的或者说得到的就是根据我们在object节点的内容配置好的容器的对象。
25             IApplicationContext ctx = ContextRegistry .GetContext();
26             //然后就可以通过得到的对象,得到实例了。
27             IMutudu mutudu = ( IMutudu)ctx.GetObject( "Mutudu");
28             //调用一下方法。
29             mutudu.Show();
30         }
31     }
32 }

按钮点击事件里的代码

好的。代码写好了,执行一下吧,点击按钮,看一下Spring.Net的力量吧(真的没有new哦):

如此看来的话,小杜倒是成功的写了一个关于Spring.Net的一个小Demo。引用配置一下,也就差不多了吧。另外还有一些属性注入构造函数注入的。只能说兴许我会写个续,恩,兴许。

如有不对之处,请斧正。另,诸君,节日快乐。

时间: 2024-10-16 17:18:48

这个好像、也许、或许、大概、应该、Maybe真的可以算是传说中的Spring.Net了吧的相关文章

[转] 程序员怎样学数学

Source:http://article.yeeyan.org/view/pluto/2365 --------------------------------------------------------------------- 读后感: 高中的时候数学成绩还不错,150分的卷子基本能保持在135以上.但是总感觉我的数学思维和数学修养仍然没什么提高.NUAA自招失败的经历让我彻底发现了这一点.大一学了一年的高数,又被繁杂的公式折磨得死去活来. 总感觉真正的数学不应该是这样的.但是真正的数

[转] - 程序员怎么学习数学

I've been working for the past 15 months on repairing my rusty math skills, ever since I read a biography of Johnny von Neumann. I've read a huge stack of math books, and I have an even bigger stack of unread math books. And it's starting to come tog

布拉德的中年危机

布拉德的中年危机 夕阳的落幕,伴随嘈杂而又微弱的声音,一点一点的逐渐低沉.侧着身体向前倾听,原来只不过是,小动物在呼唤同伴归巢或者又像首领在点着名单召唤他们回家的口令.顿时眼前影影约约好像是一个孩子在田野嬉闹,在他的动作和声音断定这个孩子一定玩的挺开心,无忧无虑.渐渐地似乎听见一个声音在呼唤,越来越清晰,原来这是小时候父母呼唤我的声音.而这样的日子不知道从那一天开始,悄无声息从身上开始剥离,直到今天眼前浮现才发现,原来曾经最温暖的早已丢弃,而现在更多的是无奈和伤感. 斜阳的余晖透过窗外偷偷的溜进

自己喜欢的一些句子摘录-2018-05-09

自己喜欢的一些文章中的句子摘录... =========================== 好的学习资料,一套就够了,看资料不是目的,只要你学会了你想要的技术哪怕你不看资料都是对的就像男孩子表白一样,表白多少次,给多少个姑娘表白,都不是目的,哪怕你只对一个女孩表白过一次,只要你找到了女朋友,你就很优秀是一样的道理,就像吃饭,你可以吃早饭,吃午饭,吃面条,吃米饭,可以用手抓,可以用筷子,可以用刀叉,可以用盘子,也可以用碗,你可以躺着吃,坐着吃,站着吃,甚至蹲着吃,这些都不重要,只要你喜欢,只要你

我对知乎前端相关问题的十问十答

之前知乎上有不少同行邀请我回答一些前端相关问题,但是,大家都知道了,要认真回答一个问题是需要大量时间和精力的,对于还在不断学习积累阶段的我,时不时分散原本的精力,打乱自己原本的节奏,实际上是一件不划算的事情.就好像邮件或者微信,来一条信息,你就去看一下,时间和精力都会大大分散,工作和学习效率必然会大打折扣.所以我的策略是一段时间后专门花时间统一处理,这样时间利用率会更高,投入产出比会更大. 对于知乎上的这些前端的问题,我也打算采用同样的套路,趁着端午节前还有两个晚上的自由时间(当晚修正:两个晚上

万达+百度+腾讯可以对抗阿里么?

一. 关于万达+百度+腾讯是否能对抗阿里的问题,我觉得没那么简单的定论. 万达,百度,腾讯,阿里,都属于国内的巨头级别的公司了.对于万达,比较熟知的就是万达电影了,实际上我本人也不是很了解万达.然而万达集团创立于1988年,已形成商业地产.高级酒店.文化产业.连锁百货.旅游度假五大产业.剩下的三个巨头企业,我想普通民众也都很了解的,因为它们的服务完全渗透在了我们生活中.首先说百度和阿里,把我最喜欢的腾讯留到最后.百度,中国最强大的搜索引擎,至少在我们普通人的认知和使用中,搜索引擎里面,刨除部分g

【年度精选】之一《2014年中国十大公有云公司点评》

公有云这个市场在国内的发展,是从2008年重点开始的,到现在有了一些企业脱颖而出,本文简单的评点了一下目前中国领先的十大云服务公司.这些企业在天时.地利.人和方面都有自己的优势和特点,最终的成功是综合因素的体现. 曾经做过一个公有云服务上的天时地利人和的分析,下次重点讲讲这方面的内容.需要强调的是,这些云服务企业还刚开始不久,好似是刚刚幼儿园大班的一群小孩,法定的基础教育阶段尚且没有开始,未来的发展变数还是很大的. 本文的排序,仅作参考,不代表严格排名.仅从业内人士角度,简单点评下国内比较著名的

【转载】张鑫旭对知乎前端相关问题的十问十答

问题一.前端现在怎么这么多人? 原问题地址是:https://www.zhihu.com/question/55886635 问题描述如下: 投出去的简历没有人看了 我的回答: 想来想去,还是从一个非前端领域的切身故事说起吧. 我的老家江苏泰兴是中国银杏之乡,产量全国1/3,而我外公家宣堡镇除了小馄饨出门,还是就是中国银杏第一乡的美称.在我小的时候,银杏的药用价值和使用价值被发掘,银杏价格突然猛增,那个时候的银杏树是没有人专门种植的,全部都是很早很早以前的那些老树,百年以上的比比皆是,或者说全部

就美国教授写给被开除中国留学生的信感受

看完这篇文章,不知道为什么胸口有点堵的慌,或许里面有很多真的戳到心里了,相信有很多人也都有这样的感受,有点说到自己了. 看着这篇老师发给让我们阅读的文章时,开始的感受:老师怎么又让写读后感了,真是的.第一次就是抱着那种功利性去读,刚开始还觉得长,前面几段好像也没说到点子上,比如:为什么把他给开除了?但就是大概知道了这件事发生了,谁和谁发生的,关于学术上,哪国的等等.好像自己现在就可以写这篇随笔了,反正也没多余的时间来看这篇文章,一个朋友告诉我你往下再读读吧!但当我往下读后感触很深,真的有点打脸,