IOC-Spring.net简单使用二

接: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();
        }
    }
}

结果:

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值