这个好像、也许、或许、大概、应该、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. 一、Struts2的概述

    一.Struts2概述 是什么? Struts2是一个M(模型---域--范围模型)V(View视图)C(控制器)框架(模型2).框架都是一个半成品.提高开发效率. Struts1是一个MVC框架,非 ...

  2. ElasticSearch-PHP的API使用(二)

    1:索引内的一个文档的创建(相当表记录的添加) 比如:要添加一条记录 INSERT INTO blog(title,content,add_time) VALUES('ElasticSearch-PH ...

  3. Javascript 模块模式

    模块模式(Module Pattern)提供了一种代码封装的方式,可以优雅地创建非耦合的代码块. 它是利用即时函数为对象创建私有变量和特权方法.严格来说,Javascript中没有私有成员的概念,所有 ...

  4. 软件工程 speedsnail 冲刺1

    2015-5-5 完成任务:背景音乐的添加: 遇到问题:循环播放的设置: 明日任务:snail的移动功能.

  5. JS匿名函数自执行函数

    JS匿名函数自执行函数:(function(){})();(function(){}) 这是一个函数,函数后面接(),则是调用函数 比如(function(arg){console.log(arg); ...

  6. SQL中补0

     SQL中补0 编写人:CC阿爸 2014-3-14 第一种方法: right('00000'+cast(@count as varchar),5) 其中'00000'的个数为right函数的最后参数 ...

  7. scala学习笔记1

    一.REPL scala解释器读到一个表达式,对它进行求值,将它的打印出来,接着再继续读下一个表达式.这个过程被称作 读取-打印-循环,即REPL. 从技术上讲,scala程序并不是一个解释器.实际发 ...

  8. Json 调用 天气API 实例

    百度了一下,找了点别人的方法改进了一下. 获取天气网址:http://www.weather.com.cn/html/weather/101210701.shtml这里是温州的,当然其他城市自己搜索一 ...

  9. 限制<input>输入内容 只允许数字 或者 字母

    只能输入数字: 有回显 <input onkeyup="value=value.replace(/[^\d]/g,'')"> 只能输入数字:无回显 <input ...

  10. CSS 设置TABLE 表格 边框

    /*table列表 合并边框设置*/ .tablelist { border-collapse:collapse; } /*table列表 设置边框宽度及颜色*/ .tablelist td { bo ...