1.构造器注入

namespace Spring.Net
{
class Program
{
//构造器注入
static void Main(string[] args)
{
IApplicationContext ctx = ContextRegistry.GetContext();
//通过容器创建对象
IUser _user = ctx.GetObject("User") as IUser;
_user.Show();
Console.ReadKey();
}
} public interface IUser
{
string Name { get; set; }
void Show();
} public class User : IUser
{
public string Name { get; set; }
public void Show()
{
Console.WriteLine("我是User的Show方法");
}
}
}
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!--一定要在紧跟着configuration下面添加-->
<configSections>
<!--跟下面Spring.Net节点配置是一一对应关系-->
<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"></resource>
</context>
<objects>
<!--name 必须要唯一的,type=类的全名称,所在的程序集-->
<object name="User" type="Spring.Net.User, Spring.Net"> </object>
</objects>
</spring> <startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>

2.属性及构造器注入

namespace Spring.Net
{
class Program
{
static void Main(string[] args)
{
IApplicationContext ctx = ContextRegistry.GetContext();
//通过容器创建对象
IUser _user = ctx.GetObject("User") as IUser;
IPeople _people = ctx.GetObject("People") as IPeople;
Test _test = ctx.GetObject("Test") as Test;
Console.WriteLine(_user.Name);
Console.WriteLine(_user.Age);
Console.WriteLine("--------------------------------------------");
Console.WriteLine(_people.Man.Name);
Console.WriteLine(_people.Man.Age);
Console.WriteLine("--------------------------------------------");
Console.WriteLine(_test.Name);
Console.WriteLine(_test.Age);
Console.ReadKey();
}
} public interface IUser
{
string Name { get; set; }
int Age { get; set; }
void Show();
} public class User : IUser
{
public string Name { get; set; }
public int Age { get; set; }
public void Show()
{
Console.WriteLine("我是User的Show方法");
}
} public interface IPeople
{
IUser Man { get; set; }
} public class People : IPeople
{
public IUser Man { get; set; }
} public class Test
{
public string Name{get;set;}
public int Age{get;set;}
public Test(string name, int age)
{
Name = name;
Age = age;
}
}
}
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!--一定要在紧跟着configuration下面添加-->
<configSections>
<!--跟下面Spring.Net节点配置是一一对应关系-->
<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"></resource>
</context>
<objects> <object name="User" type="Spring.Net.User, Spring.Net">
<!--01属性注入-值类型-->
<property name="Name" value="Linq"></property>
<property name="Age" value="25"></property>
</object> <object name="People" type="Spring.Net.People, Spring.Net">
<!--02属性注入-引用类型-->
<property name="Man" ref="User"></property>
</object> <object name="Test" type="Spring.Net.Test, Spring.Net">
<!--03构造函数注入-->
<constructor-arg name="name" value="config配置"></constructor-arg>
<constructor-arg name="age" value="25"></constructor-arg>
</object>
</objects>
</spring> <startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>

3.方法注入

namespace Spring.Net
{
class Program
{
static void Main(string[] args)
{
IApplicationContext ctx = ContextRegistry.GetContext();
ObjectFactory dao = (ObjectFactory)ctx.GetObject("objectFactory");
//查询方法注入
//查询方法注入就利用了这些功能。个人感觉查询方法注入类似抽象工厂,
//为之不同的是,可以不用写抽象的实现代码,通过配置文件动态的切换组件。
dao.CreatePersonDao().Save();
//事件注入
Door door = (Door)ctx.GetObject("door");
door.OnOpen("Opening!");
Console.WriteLine();
Console.Read();
} } public abstract class ObjectFactory
{
//或者可以是一个虚方法
public abstract PersonDao CreatePersonDao();
} public class PersonDao
{
public void Save()
{
Console.WriteLine("保存数据");
}
} //先定义一个委托
public delegate string OpenHandler(string arg); public class Door
{
public event OpenHandler OpenTheDoor; public void OnOpen(string arg)
{
//调用事件
if (OpenTheDoor != null)
{
Console.WriteLine(OpenTheDoor(arg));
}
}
} public class Men
{
public string OpenThisDoor(string arg)
{
return "参数是:" + arg;
}
}
}
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!--一定要在紧跟着configuration下面添加-->
<configSections>
<!--跟下面Spring.Net节点配置是一一对应关系-->
<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"></resource>
</context> <objects>
<!--查询方法-->
<object id="personDao" type="Spring.Net.PersonDao, Spring.Net" singleton="false"/> <object id="objectFactory" type="Spring.Net.ObjectFactory, Spring.Net">
<lookup-method name="CreatePersonDao" object="personDao"/>
</object> <!--事件注入-->
<object id="men" type="Spring.Net.Men, Spring.Net">
<listener event="OpenTheDoor" method="OpenThisDoor">
<ref object="door"/>
</listener>
</object> <object id="door" type="Spring.Net.Door, Spring.Net" />
</objects>
</spring> <startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>

Spring.Net的IOC入门的更多相关文章

  1. Spring框架[一]——spring概念和ioc入门(ioc操作xml配置文件)

    Spring概念 spring是开源的轻量级框架(即不需要依赖其他东西,可用直接使用) spring核心主要两部分 aop:面向切面编程,扩展功能不是修改源代码来实现: ioc:控制反转,比如:有一个 ...

  2. 【Spring】---【IOC入门案例】

    第一步:导入Jar包 第二步:创建类,在类里面创建方法 public class User { public void add(){ System.out.println("-------- ...

  3. Spring初识及其IOC入门

    一.框架 框架是一些类和接口的集合,它一个半成品,已经对基础的代码进行了封装并提供相应的API,开发者在使用框架时直接调用封装好的api可以省去很多代码编写,从而提高工作效率和开发速度. 二.Spri ...

  4. 1、Spring简介及IOC入门案例

    一.Spring框架介绍 1.介绍 Spring框架是由于软件开发的复杂性而创建的.Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情.然而,Spring的用途不仅仅限于服务 ...

  5. Spring框架的IOC核心功能快速入门

    2. 步骤一:下载Spring框架的开发包 * 官网:http://spring.io/ * 下载地址:http://repo.springsource.org/libs-release-local/ ...

  6. Spring入门1. IoC入门实例

    Spring入门1. IoC入门实例 Reference:Java EE轻量级解决方案——S2SH 前言: 之前学习过关于Spring的一点知识,曾经因为配置出现问题,而总是被迫放弃学习这些框架技术, ...

  7. Spring 核心概念以及入门教程

    初始Spring 在学习Spring之前我们首先要了解一下企业级应用.企业级应用是指那些为商业组织,大型企业而创建并部署的解决方案及应用. 这些大型企业级应用的结构复杂,涉及的外部资源众多,事务密集, ...

  8. Spring MVC 教程,快速入门,深入分析

    http://elf8848.iteye.com/blog/875830/ Spring MVC 教程,快速入门,深入分析 博客分类: SPRING Spring MVC 教程快速入门  资源下载: ...

  9. Spring学习之Ioc控制反转(1)

    开始之前: 1. 本博文为原创,转载请注明出处 2. 作者非计算机科班出身,如有错误,请多指正 ---------------------------------------------------- ...

随机推荐

  1. DOM的相关优化

    为什么要进行DOM优化? DOM对象本身也是一个js对象,所以严格来说,并不是操作这个对象慢,而是说操作了这个对象后,会触发一些浏览器行为,比如布局(layout)和绘制(paint). 首先先说一些 ...

  2. SQL Server 2008 R2安装图解教程

    一.下载SQL Server 2008 R2安装文件 cn_sql_server_2008_r2_enterprise_x86_x64_ia64_dvd_522233.iso 二.将安装文件刻录成光盘 ...

  3. BZOJ 3832: [Poi2014]Rally

    Sol 线段树+拓扑序. 先把图的拓扑序搞出来,然后统计从起点到该点最长链,从该点到终点的最长链,然后建个起点终点,这里跟网络流很像,把它统一到一个有起点的图中,这里也要注意下细节处理.S,T的一个边 ...

  4. COGS 2416.[HZOI 2016]公路修建 & COGS 2419.[HZOI 2016]公路修建2 题解

    大意: [HZOI 2016]公路修建 给定一个有n个点和m-1组边的无向连通图,其中每组边都包含一条一级边和一条二级边(连接的顶点相同),同一组边中的一级边权值一定大于等于二级边,另外给出一个数k( ...

  5. centos 设置永久dns

    最近在折腾一个问题. 由于服务器的带宽是联通5M, 不稳定.而且所处的网络的dns解析貌似老出问题,每隔一定周期解析时间特别长. 于是乎,想在本地做一个dns,这样可以减少dns解析时间,并做些静态配 ...

  6. Sort Transformed Array

    Given a sorted array of integers nums and integer values a, b and c. Apply a function of the form f( ...

  7. Expression Add Operators

    Given a string that contains only digits 0-9 and a target value, return all possibilities to add bin ...

  8. Sublime Text编辑工具带有 PEP 8 格式检测插件

    Sublime Text编辑工具带有 PEP 8 格式检测插件

  9. CSS中的float与clear

    参考: http://www.cnblogs.com/iyangyuan/archive/2013/03/27/2983813.html http://www.cnblogs.com/iloveyou ...

  10. Appium+Robotframework实现Android应用的自动化测试-4:AppiumLibrary介绍和安装

    Appium是个好东东,Android,iOS都支持,并且居然RobotFramework也支持Appium了,这就是本文要介绍的AppiumLibrary. 通过前面的文章大家知道可以使用多种语言来 ...