Spring.Net-IOC和DI的实现

1.首先建一个Winform程序,点击引用,管理Nuget程序包,搜素Spring.Core,下载下来,实际上会添加Spring.Core和Common.Logging和Common.Logging.Core三个引用

2.将app.config文件替换为以下内容,从而使Spring.NET从标准的.NET配置文件中初始化IApplicationContext...

<?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="UserInfoService" type=" DXM.OA.SpringNet.UserInfoService,  DXM.OA.SpringNet">
        <property name="UserName" value="zhangsan"/>
        <!--引用下面的Person对象-->
        <property name="Person" ref="Person"/>
      </object>

      <!--将创建的Person对象-->
      <object name="Person" type=" DXM.OA.SpringNet.Person,  DXM.OA.SpringNet">
        <property name="Age" value="15"/>
      </object>
    </objects>

  </spring>
</configuration>

3.在配置文件中,通过<objects/>节点的<object/>子节点来配置程序中用到的对象。

4.在窗口按钮的单击事件中加入以下代码:

 IApplicationContext ctx = ContextRegistry.GetContext();
IUserInfoService service = (IUserInfoService)ctx.GetObject("UserInfoService");//声明接口的好处,可以和类解耦
MessageBox.Show(service.ShowMsg());

/*****************************************************************************************/

using Spring.Context;
using Spring.Context.Support;
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;

namespace CZBK.ItcastOA.SpringNet
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {

            IApplicationContext ctx = ContextRegistry.GetContext();
            IUserInfoService lister = (IUserInfoService)ctx.GetObject("UserInfoService");
            MessageBox.Show(lister.ShowMsg());
        }
    }
}
 

/**************************************************************************************************/

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DXM.OA.SpringNet
{
    public interface IUserInfoService
    {
        string ShowMsg();
    }
}
/********************************************************************************************/

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DXM.OA.SpringNet
{
    public class Person
    {
        public int Age { get; set; }
    }
}
 

/********************************************************************************************/

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DXM.OA.SpringNet
{
    public class UserInfoService : IUserInfoService
    {
        public string UserName { get; set; }

        public Person Person { get; set; }

        public string ShowMsg()
        {
            return "Hello,World "+ UserName+":Age:"+Person.Age.ToString();
        }
    }
}

以上已经可以正常运行了

也可以将Objects抽取出来放到一个xml文件中,然后再app.config的context下面引用该xml文件,此时注意的是设置该xml文件的编译属性为始终复制,因为Spring.net只在bin/debug下面找文件,但app.config里面要保留objects节:

<?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"/>
      <resource uri="file://services.xml"/>
    </context>
    <objects xmlns="http://www.springframework.net">
      <description>An  example that demonstrates simple IoC features.</description>
      <!--将要创建的对象--><!--
      <object name="UserInfoService" type=" DXM.OA.SpringNet.UserInfoService,  DXM.OA.SpringNet">
        <property name="UserName" value="zhangsan"/>
        --><!--引用下面的Person对象--><!--
        <property name="Person" ref="Person"/>
      </object>
      --><!--将创建的Person对象--><!--

      <object name="Person" type=" DXM.OA.SpringNet.Person,  DXM.OA.SpringNet">
        <property name="Age" value="15"/>
      </object>-->
    </objects>
  </spring>
</configuration>

/*******************************services.xml*********************************************************/

<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net">
  <description>An  example that demonstrates simple IoC features.</description>
  <!--将要创建的对象-->
  <object name="UserInfoService" type=" DXM.OA.SpringNet.UserInfoService,  DXM.OA.SpringNet">
    <property name="UserName" value="zhangsan"/>
    <!--引用下面的Person对象-->
    <property name="Person" ref="Person"/>
  </object>
  <!--将创建的Person对象-->
  <object name="Person" type=" DXM.OA.SpringNet.Person,  DXM.OA.SpringNet">
    <property name="Age" value="15"/>
  </object>
</objects>
 


 

 

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值