这个好像、也许、或许、大概、应该、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. 【EF学习笔记03】----------使用原生Sql语句

    在EF中使用原生SQL,首先要创建上下文对象 using (var db = new Entities()) { //数据操作 } 新增 string sql = "insert into ...

  2. C++ STL 简单记录

    1,STL提供三种类型的组件:容器.迭代器.算法. 容器: 顺序容器(vector.list.deque.string等)是一系列元素的有序集合: 关联容器(set.multiset.map.mult ...

  3. 详说 Cookie, LocalStorage 与 SessionStorage

    本文最初发布于我的个人博客:咀嚼之味 最近在找暑期实习,其中百度.网易游戏.阿里的面试都问到一些关于HTML5的东西,问题大多是这样开头的:“你用过什么HTML5的技术呀?” 而后,每次都能扯到 Co ...

  4. 如何:通过对字符串应用 HTML 编码在 Web 应用程序中防止脚本侵入

    大多数脚本利用发生在用户可以将可执行代码(或脚本)插入您的应用程序时. 默认情况下,ASP.NET 提供请求验证.只要窗体发送包含任何 HTML,该验证都会引发错误. 您可以使用下列方法防止脚本利用: ...

  5. C# [STAThread]

    转载:http://www.cnblogs.com/netdazhi/articles/1189549.html 每个Thread都有一个关于ApartmentState的属性,可以把它设置为:STA ...

  6. 已经导入了具有相同的简单名称“Interop.DSOFramer, Version=1.3.0.0, Culture=neutral, PublicKeyToken=null”的程序集。

    错误  : 已经导入了具有相同的简单名称“Interop.DSOFramer, Version=1.3.0.0, Culture=neutral, PublicKeyToken=null”的程序集. ...

  7. ElasticSearch部署

    安装jdk1.7 1.卸载Liunx自带的openjdk rpm -qa | grep jdk 查看当前的jdk版本 sudo yum -y remove java-1.7.0-openjdk-hea ...

  8. 关于 mvc 中 连字符 - 和下划线 _转换的问题。

     [潜水]大崔||哈尔滨(759666247) 10:02:16  如图   C#不承认 “-”[知府]古道今-湖北\xig<systemobject@126.com> 10:03:54  ...

  9. Hadoop伪分布式搭建CentOS

    所需软件及版本: jdk-7u80-linux-x64.tar.gz hadoop-2.6.0.tar.gz 1.安装JDK Hadoop 在需在JDK下运行,注意JDK最好使用Oracle的否则可能 ...

  10. p ython笔记第一天

    一.Linux基础 - 计算机以及日后我们开发的程序防止的服务器的简单操作 二.Python开发 http://www.cnblogs.com/wupeiqi/articles/5433893.htm ...