接:IOC-Spring.net简单使用一
1.属性注入
<object name="PropertyDal" type="SpringNetTest.EFUserInfoDal,SpringNetTest">
<property name="Name" value="朵朵"></property>
<!--ref指向下面的属性注入-->
<property name="UserInfo" ref="UserInfo"></property>
</object>
<object name="UserInfo" type="SpringNetTest.UserInfo,SpringNetTest">
<property name="Name" value="猪猪"></property>
<property name="Age" value="2"></property>
</object>
2.构造函数注入
<!--构造函数注入-->
<object name="PropertyDal2" type="SpringNetTest.AdoNetUserInfoDal,SpringNetTest">
<constructor-arg index="0" value="小猪"></constructor-arg>
<constructor-arg index="1" ref="UserInfo"></constructor-arg>
</object>
<!--和属性注入公用一个-->
<object name="UserInfo" type="SpringNetTest.UserInfo,SpringNetTest">
<property name="Name" value="猪猪"></property>
<property name="Age" value="2"></property>
</object>
3.容器的配置
<context>
<!--容器配置-->
<resource uri="config://spring/objects"/>
<!--xml文件方式,更改属性,复制到输出目录:始终复制-->
<!--<resource uri="file://objects.xml"/>-->
<!--嵌入程序集方式,assembly://程序集名/项目名/objects.xml,更改属性,始终复制,生成操作,嵌入的资源-->
<!--<resource uri="assembly://SpringNetTest/SpringNetTest/objects.xml"/>-->
</context>
4.完整代码
app.config
<?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>
<section name="objects" type="Spring.Context.Support.DefaultSectionHandler,Spring.Core" />
</sectionGroup>
</configSections>
<!--Spring.Net节点配置-->
<spring>
<context>
<!--容器配置-->
<!--<resource uri="config://spring/objects"></resource>-->
<!--嵌入程序集方式,assembly://程序集名/项目名/objects.xml,更改属性,始终复制,生成操作,嵌入的资源-->
<resource uri="assembly://SpringNetTest/SpringNetTest/objects.xml"></resource>
</context>
</spring>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
</configuration>
IUserInfo和实现类
public interface IUserInfoDal
{
UserInfo UserInfo { get; set; }
string Name { get; set; }
void Show();
}
public class AdoNetUserInfoDal : IUserInfoDal
{
public AdoNetUserInfoDal(string name,UserInfo userinfo)
{
this.UserInfo = userinfo;
this.Name = name;
}
public UserInfo UserInfo { get; set; }
public string Name { get; set; }
public void Show()
{
Console.WriteLine("我是ADO.Net Dal,属性注入Name=" + Name);
Console.WriteLine("我是ADO.Net Dal,UserInfo Name=" + UserInfo.Name + "\\\\Age=" + UserInfo.Age);
}
}
public class EFUserInfoDal : IUserInfoDal
{
public EFUserInfoDal()
{
}
public UserInfo UserInfo { get; set; }
public string Name { get; set; }
public void Show()
{
Console.WriteLine("我是EF Dal,属性注入Name="+Name);
Console.WriteLine("我是EF Dal,UserInfo Name=" + UserInfo.Name + "\\\\Age=" + UserInfo.Age);
}
}
UserInfo
public class UserInfo
{
public string Name { get; set; }
public int Age { get; set; }
}
objects.xml
<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net">
<!--这里放容器里面的所有节点-->
<description>An example that demonstrates simple IoC features.</description>
<!--name 必须要唯一的,type=类的全名称,所在的程序集-->
<!--<object name="EFUserInfoDal" type="SpringNetTest.EFUserInfoDal,SpringNetTest"></object>
<object name="ADOUserInfoDal" type="SpringNetTest.AdoNetUserInfoDal,SpringNetTest"></object>-->
<object name="PropertyDal" type="SpringNetTest.EFUserInfoDal,SpringNetTest">
<property name="Name" value="朵朵"></property>
<!--ref指向下面的属性注入-->
<property name="UserInfo" ref="UserInfo"></property>
</object>
<!--构造函数注入-->
<object name="PropertyDal2" type="SpringNetTest.AdoNetUserInfoDal,SpringNetTest">
<constructor-arg index="0" value="小猪"></constructor-arg>
<constructor-arg index="1" ref="UserInfo"></constructor-arg>
</object>
<!--属性注入-->
<object name="UserInfo" type="SpringNetTest.UserInfo,SpringNetTest">
<property name="Name" value="猪猪"></property>
<property name="Age" value="2"></property>
</object>
</objects>
Program
namespace SpringNetTest
{
class Program
{
static void Main(string[] args)
{
//控制权没有反转
//IUserInfoDal infoDal = new EFUserInfoDal();
//Spring.Net 创建实例的方式转为容器帮我们创建
//创建spring容器上下文
IApplicationContext ct = ContextRegistry.GetContext();
IUserInfoDal efdal = ct.GetObject("PropertyDal2") as IUserInfoDal;
efdal.Show();
IUserInfoDal adodal = ct.GetObject("PropertyDal") as IUserInfoDal;
adodal.Show();
Console.ReadKey();
}
}
}
结果: