这个好像、也许、或许、大概、应该、Maybe真的可以算是传说中的Spring.Net了吧
        以前写过一篇名叫”这个好像、也许、大概、应该、Maybe真的算是传说中的面向接口编程了吧“的文章,当时好像是在评论里许诺以后会有一篇叫”文章这个好像、也许、大概、应该、Maybe真的算是传说中的Spring.Net吧“。然后,现在在我们节日的时候,大抵可以算是来承兑诺言的吧。
       先介绍一下IoC吧。它呢,中文名字是控制反转。英文是Inversion of Control。Spring.Net就是IoC的一个框架。原本的对象是由类来管理的,比如让创建一个此类的实例,我们会new此类。有了IoC我们就不需要用到这个类去new了,或者说是不用这个类去管理它相应的对象了。而是交给了我们的IoC框架来管理这些了。这样不用类去管理的话,就可以做到松耦合。刘冬先生写过Spring.Net的一个系列,感兴趣的朋友可以看一下的。
        我在这里就写一个小小的案例吧。
        最开始,先创建一个窗体的应用程序,在窗体上创建一个按钮并且将窗体应用程序的输出类型改成控制台应用程序(如若不改成控制台应用程序,那么将无法输出我们想要的结果)。建立一个类和一个接口。写类和接口,是为后面调用实例做准备。
 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace SpringNetStudy1024
{
class Mutudu:IMutudu
{
public void Show()
{
Console.WriteLine( "小杜成功的写了一个Spring.Net的案例" );
}
}
}

Mutudu

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace SpringNetStudy1024
{
interface IMutudu
{
void Show();
}
}

IMutudu

 
         因为我们是需要用到第三方的类库的。那么我们得先把Spring.Net第三方的类库先添加到我们的项目当中来。我们就在项目中新建立一个文件夹,将我们需要的第三方类库拷贝进来。然后项目添加对这些第三方类库的引用。我们必须要引用的有两个dll,一个是Common.Logging.dll。另外一个是Spring.Core.dll.这两个是必不可少的。
 
          
 
 
 
        如若少了,则会这样(我曾经少引用了一个):
  
 
 
       第三方类库我们是引用进来了。我们说了,类是交给我们的IoC容器来管理的,那么我们的IoC容器呢?我们需要得到IoC容器,然后IoC容器才好去管理吧。关于这个嘛,我们是通过配置初始化IoC容器。也就是初始化IApplicationContext。个人认为这个类的地位是有点类似于EF里的上下文的,有点承上启下的意思。那么修改一下App.Config吧。
 <?xml version="1.0" encoding =" utf-8" ?>
<configuration>
< configSections>
< sectionGroup name =" spring" >
< section name =" context" type="Spring.Context.Support.ContextHandler, Spring.Core" />
< section name =" objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
</ sectionGroup>
</ configSections>
< spring>
< context>
< resource uri =" config://spring/objects"/>
</ context>
< objects xmlns =" http://www.springframework.net">
< description>An example that demonstrates simple IoC features.</description>
</ objects>
</ spring>
</configuration>

App.Config

 
       另外需要说一下的就是在配置文件中,我们是通过objects节点的子节点来配置程序中用到的对象的,当然,object节点其是位于objects(有s)节点下的。比如我们现在需要把我们那会写的类配置进来,那么就在objects节点下配置object节点:
 <? xml version =" 1.0" encoding =" utf-8" ?>
< configuration>
< configSections >
< sectionGroup name =" spring" >
< section name =" context" type =" Spring.Context.Support.ContextHandler, Spring.Core" />
< section name =" objects" type =" Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
</ sectionGroup >
</ configSections >
< spring >
< context >
< resource uri =" config://spring/objects "/>
</ context >
< objects xmlns =" http://www.springframework.net ">
< description >An example that demonstrates simple IoC features.</ description>
<!-- 下面就是将类交给窗口管理的配置代码,仅此一行。 -->
< object name =" Mutudu" type =" SpringNetStudy1024.Mutudu, SpringNetStudy1024" > </ object>
</ objects >
</ spring >
</ configuration>

类让IoC来管理吧。

 
      通过"IApplicationContext ctx = ContextRegistry .GetContext();"这行代码拿到的就是配置好的object下节点我们配置好的对象。这行代码蛮关键的。
 
 
 
      那么,我们看一下按钮点击事件里的代码:
 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Spring.Context;
using Spring.Context.Support; namespace SpringNetStudy1024
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void PowerOfIoC_Click( object sender, EventArgs e)
{
//这里返回的或者说得到的就是根据我们在object节点的内容配置好的容器的对象。
IApplicationContext ctx = ContextRegistry .GetContext();
//然后就可以通过得到的对象,得到实例了。
IMutudu mutudu = ( IMutudu)ctx.GetObject( "Mutudu");
//调用一下方法。
mutudu.Show();
}
}
}

按钮点击事件里的代码

 
       好的。代码写好了,执行一下吧,点击按钮,看一下Spring.Net的力量吧(真的没有new哦):
 
 
      如此看来的话,小杜倒是成功的写了一个关于Spring.Net的一个小Demo。引用配置一下,也就差不多了吧。另外还有一些属性注入构造函数注入的。只能说兴许我会写个续,恩,兴许。
 
 
      如有不对之处,请斧正。另,诸君,节日快乐。
      
 

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

  1. js 性能基准测试工具-告别可能、也许、大概这样更快更省

    平时写js经常遇到这样做是不是更快点?但又没有具体简单可测试的工具,最近也倒序看博客园司徒正美 js分类下的文章 [ps:去年灵光一闪,发现看博客园排名前100的博客.按照文章分类倒序看是学习最快的方 ...

  2. [雅礼NOIP2018集训 day1]

    现在才来填坑,之后还要陆续补其他几天的,可能前几天真的太颓了 T1: 题目大意:给定一个长度为n的序列,m次询问每次询问给出l,r,询问区间l到r的元素在模k意义下的最大值 数据范围当然是你暴力写不过 ...

  3. 人工智能大数据,公开的海量数据集下载,ImageNet数据集下载,数据挖掘机器学习数据集下载

    人工智能大数据,公开的海量数据集下载,ImageNet数据集下载,数据挖掘机器学习数据集下载 ImageNet挑战赛中超越人类的计算机视觉系统微软亚洲研究院视觉计算组基于深度卷积神经网络(CNN)的计 ...

  4. 100+诡异的数据集,20万Eclipse Bug、死囚遗言等

    摘要:近日,Robert Seaton整理了100多个最有趣的数据集,其中包括Jeopardy真题,死囚的最后一句话,20万个Eclipse Bug,足球比赛相关,柏拉图式的爱情,太阳系以外的行星,1 ...

  5. 【Python】 零碎知识积累 II

    [Python] 零碎知识积累 II ■ 函数的参数默认值在函数定义时确定并保存在内存中,调用函数时不会在内存中新开辟一块空间然后用参数默认值重新赋值,而是单纯地引用这个参数原来的地址.这就带来了一个 ...

  6. 用Python最原始的函数模拟eval函数的浮点数运算功能(2)

    这应该是我编程以来完成的难度最大的一个函数了.因为可能存在的情况非常多,需要设计合理的参数来控制解析流程.经验概要: 1.大胆假设一些子功能能够实现,看能否建立整个框架.如果在假设的基础上都无法建立, ...

  7. 驳2B文 "我为什么放弃Go语言"

      此篇文章流传甚广, 其实里面没啥干货, 而且里面很多观点是有问题的. 这个文章在 golang-china 很早就讨论过了. 最近因为 Rust 1.0 和 1.1 的发布, 导致这个文章又出来毒 ...

  8. 2019清明期间qbxt培训qwq

    4.4上午:数学基础 (qwq整成word和cpp了,它居然不能直接把文档附上来) part 1:高精度运算 高精加和高精减就不说了,之前写过博客了qwq,讲一讲高精乘和高精除吧. 1.高精度乘法(不 ...

  9. 动词的时态(Les temps du verbe )

    在开始讲解直陈式现在时的主要用法之前,我们有必要先搞清楚两个基本概念:▶语式(mode):语式是动词表达动作的方式.一个动作,可以作为实在的事表达出来,也可以作为希望或单纯设想的事表达出来,法语动词共 ...

随机推荐

  1. iOS键盘类型

    一.键盘风格 UIKit框架支持8种风格键盘. typedef enum { UIKeyboardTypeDefault,                // 默认键盘:支持所有字符 UIKeyboa ...

  2. idea类似eclipse鼠标提示java api信息

    <ignore_js_op> 详细说明:http://java.662p.com/thread-2615-1-1.html

  3. C#处理Excel

    C#处理Excel C#处理Excel 前言 OleDb 具体操作 NPOI 具体操作 Excel C# NPOI OleDb 前言 最近需要对Excel进行加密解密操作,本身是一个简单的事情,通过 ...

  4. Linux命令行选项及参数

    1.main函数参数形式 int main(int argc , char *argv[] , char *env[]); //第一个参数argc代表命令行的参数个数 //第二个参数依次指向各个参数, ...

  5. HTML5学习笔记简明版(1):HTML5介绍与语法

    HTML5介绍 HTML5是继HTML4以后的下一代HTML标准规范,它提供了一些新的元素和属性(例如<nav>网站导航块和<footer>).新型的标签有利于搜索引擎和语义分 ...

  6. 阿里云利用web直传文件到oss服务器

    http://files.cnblogs.com/files/adtuu/oss-h5-upload-js-direct.tar.gz

  7. LinqToSql和ASP.NET Entity FrameWork 中使用事务

    ASP.NET Entity FrameWork中: int flag = -1; if (this.URPmanagementEntities1.Connection.State != System ...

  8. <bootstrap>bs2和3的区别</bootstrap>

    实验室的list网站开始动工了,准备打算用bootstrap作布局. 大前天去本部停了长html5峰会大连站的讲演,着急往回赶,很多感兴趣的东西都没有听到,但是还是了解了一些html5的新特性 电脑端 ...

  9. NOJ1142-最大连续和

    最大连续和 时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte总提交 : 1282            测试通过 : 230 ...

  10. 【转】oracle connect by用法

    今天偶然看到connect by,但记不太清楚具体用法了.转了个博客(写的蛮好的),当作笔记. http://www.cnblogs.com/linjiqin/p/3152690.html 先用sco ...