Spring.NET IoC容器的用法。

通过简单的例子学习Spring.Net

1、先创建一个控制台程序项目。

2、添加IUserInfoDal 接口。

namespace Spring.Net
{
public interface IUserInfoDal
{
void Show();
}
}

3、添加AdoNetUserInfoDal类和EFUserInfoDal类,继承IUserInfoDal接口。

AdoNetUserInfoDal.cs

public class AdoNetUserInfoDal:IUserInfoDal
{
public void Show()
{
Console.WriteLine("我是 AdoNet Dal );
}
}

EFUserInfoDal.cs

public class EFUserInfoDal: IUserInfoDal
{
public void Show()
{
Console.WriteLine("我是EF Dal);
}
}

4、引用Spring.Net程序集 Spring.Core.dll 和 Common.Logging.dll

5、添加Spring.Net配置节点,配置object节点

<?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> <startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup> <!--Spring.Net节点配置-->
<spring>
<context>
<!--容器配置-->
<resource uri="config://spring/objects"/>
</context>
<objects xmlns="http://www.springframework.net">
<!--这里放容器里面的所有节点-->
<description>An example that demonstrates simple IoC features.</description>
<!--name 必须要唯一的,type=类的全名称,所在的程序集-->
<object name="UserInfoDal" type="Spring.Net.EFUserInfoDal, Spring.Net">
</object>
</spring>
</configuration>

6、开始写主函数,创建spring容器上下文

namespace Spring.Net
{
class Program
{
static void Main(string[] args)
{
//控制权没有反转
//IUserInfoDal infoDal = new EFUserInfoDal(); //Spring.Net 创建实例的方式转为容器帮我们创建
//创建spring容器上下文
IApplicationContext ctx = ContextRegistry.GetContext();
//通过容器创建对象
IUserInfoDal efDal = ctx.GetObject("UserInfoDal") as IUserInfoDal;
efDal.Show();
Console.ReadKey();
}
}
}

7、属性注入

<!--Spring.Net节点配置-->
<spring>
<context>
<!--容器配置-->
<resource uri="config://spring/objects"/>
</context>
<objects xmlns="http://www.springframework.net">
<!--这里放容器里面的所有节点-->
<description>An example that demonstrates simple IoC features.</description>
<!--name 必须要唯一的,type=类的全名称,所在的程序集-->
<object name="UserInfoDal" type="Spring.Net.EFUserInfoDal, Spring.Net">
<property name="Name" value="张三"/>
<!--ref指向下面的属性注入-->
<property name="UserInfo" ref="UserInfo"/>
</object> <!--属性注入-->
<object name="UserInfo" type="Spring.Net.UserInfo, Spring.Net">
<property name="Name" value="李四"/>
<property name="Age" value="15"/>
</object>
</objects>
</spring>

8、构造函数注入

<!--构造函数注入-->
<object name="UserInfoDal2" type="Spring.Net.AdoNetUserInfoDal, Spring.Net">
<constructor-arg index="0" value="张三"/>
<constructor-arg index="1" ref="UserInfo"/>
</object>

9、容器配置

<context>
<!--容器配置-->
<resource uri="config://spring/objects"/>
<!--xml文件方式,更改属性,复制到输出目录:始终复制-->
<!--<resource uri="file://objects.xml"/>-->
<!--嵌入程序集方式,assembly://程序集名/项目名/objects.xml,更改属性,始终复制,生成操作,嵌入的资源-->
<!--<resource uri="assembly://Spring.Net/Spring.Net/objects.xml"/>-->
</context>

10、完整例子

IUserInfoDal.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace Spring.Net
{
public interface IUserInfoDal
{
UserInfo UserInfo { get; set; }
string Name { get; set; } void Show();
}
}

AdoNetUserInfoDal.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace Spring.Net
{
public class AdoNetUserInfoDal:IUserInfoDal
{
public AdoNetUserInfoDal(string name, UserInfo userInfo)
{
Name = name;
UserInfo = userInfo;
}
public UserInfo UserInfo { get; set; }
public string Name { get; set; } public void Show()
{
Console.WriteLine("我是 AdoNet Dal ,属性注入:Name=" + Name);
Console.WriteLine("UserInfo ,Name=" + UserInfo.Name + " Age=" + UserInfo.Age);
}
}
}

EFUserInfoDal.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace Spring.Net
{
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("UserInfo ,Name=" + UserInfo.Name + " Age=" + UserInfo.Age);
}
}
}

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 name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
</sectionGroup>
</configSections> <startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup> <!--Spring.Net节点配置-->
<spring>
<context>
<!--容器配置-->
<resource uri="config://spring/objects"/>
<!--xml文件方式,更改属性,复制到输出目录:始终复制-->
<!--<resource uri="file://objects.xml"/>-->
<!--嵌入程序集方式,assembly://程序集名/项目名/objects.xml,更改属性,始终复制,生成操作,嵌入的资源-->
<!--<resource uri="assembly://Spring.Net/Spring.Net/objects.xml"/>-->
</context>
<objects xmlns="http://www.springframework.net">
<!--这里放容器里面的所有节点-->
<description>An example that demonstrates simple IoC features.</description>
<!--name 必须要唯一的,type=类的全名称,所在的程序集-->
<object name="UserInfoDal" type="Spring.Net.EFUserInfoDal, Spring.Net">
<property name="Name" value="张三"/>
<!--ref指向下面的属性注入-->
<property name="UserInfo" ref="UserInfo"/>
</object> <!--构造函数注入-->
<object name="UserInfoDal2" type="Spring.Net.AdoNetUserInfoDal, Spring.Net">
<constructor-arg index="0" value="张三"/>
<constructor-arg index="1" ref="UserInfo"/>
</object> <!--属性注入-->
<object name="UserInfo" type="Spring.Net.UserInfo, Spring.Net">
<property name="Name" value="李四"/>
<property name="Age" value="15"/>
</object>
</objects>
</spring>
</configuration>

Program.cs

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; //Spring.Aop.dll 面向切面编程
//Spring.Core.dll spring框架基础
//Common.Logging.dll 这个必须也要引用 namespace Spring.Net
{
class Program
{
static void Main(string[] args)
{
//控制权没有反转
//IUserInfoDal infoDal = new EFUserInfoDal(); //Spring.Net 创建实例的方式转为容器帮我们创建
//第一步,引用Spring.Net程序集 Spring.Core.dll 和 Common.Logging.dll
//第二步,添加Spring.Net配置节点
//第三步,配置object节点
//第四步,创建spring容器上下文
IApplicationContext ctx = ContextRegistry.GetContext();
//第五步,通过容器创建对象
IUserInfoDal efDal = ctx.GetObject("UserInfoDal") as IUserInfoDal;
efDal.Show(); IUserInfoDal adoDal = ctx.GetObject("UserInfoDal2") as IUserInfoDal;
adoDal.Show(); Console.ReadKey();
}
}
}

下面是MVC项目中使用Spring.Net融合的例子

1、将Spring.net程序集复制到项目下的packages文件夹中。

2、项目中添加引用Spring.Core.dll、Common.Logging.dll、Spring.Web.Mvc4.dll、Spring.Web.dll

3、修改Web.config,配置节点

<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> <!-- Spring.Net配置节点 -->
<sectionGroup name="spring">
<section name="context" type="Spring.Context.Support.MvcContextHandler, Spring.Web.Mvc4"/>
</sectionGroup>
</configSections>
<!-- Spring.Net节点详细配置 -->
<spring>
<context>
<resource uri="file://~/Config/controllers.xml"/>
</context>
</spring> </configuration>

4、项目中创建Config文件夹,controllers.xml文件。

<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net"> <object type="HX.Shop.UI.Main.Controllers.AdminController, HX.Shop.UI.Main" singleton="false" >
<property name="AdminService" ref="AdminService" />
</object>
<object name="AdminService" type="HX.Shop.BLL.AdminService, HX.Shop.BLL" singleton="false" > </object>
</objects>

5、Global.asax 中修改 SpringMvcApplication

public class MvcApplication : Spring.Web.Mvc.SpringMvcApplication //System.Web.HttpApplication

Spring.Net 简单入门学习的更多相关文章

  1. spring security 简单入门

    spring security 简单入门示例 一.概述 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架 . 其中最主要的安全操作有两 ...

  2. spring data jpa入门学习

    本文主要介绍下spring data jpa,主要聊聊为何要使用它进行开发以及它的基本使用.本文主要是入门介绍,并在最后会留下完整的demo供读者进行下载,从而了解并且开始使用spring data ...

  3. Spring Data Jpa 入门学习

    本文主要讲解 springData Jpa 入门相关知识, 了解JPA规范与Jpa的实现,搭建springboot+dpringdata jpa环境实现基础增删改操作,适合新手学习,老鸟绕道~ 1. ...

  4. Spring AOP 简单入门笔记 (转)

    分享一个自己写的最为简单的Spring AOP的应用,其实,本人也是学习Spring不久,只是把一些个人的理解分享下,供参考.可能很多人刚开始不太理解到底啥是AOP,其实它也是相对 OOP来说的,类似 ...

  5. Spring Cloud简单入门教程

    原文地址:http://www.cnblogs.com/skyblog/p/5127690.html 按照官方的话说:Spring Cloud 为开发者提供了在分布式系统(如配置管理.服务发现.断路器 ...

  6. spring AOP简单入门

    AOP(aspect oriented programming)面向切面编程. 大致意思是在方法的执行过程中织入其他要执行的方法. 项目结构图 先介绍一下通过代理的方式实现aop,几个文件和上一篇一样 ...

  7. spring IOC简单入门

    spring的核心是ioc和aop 先介绍一下IOC(inverse of control控制反转)又叫DI(Dependency injection依赖注入) 个人理解为把对象的控制权由类转移到配置 ...

  8. SDL 简单入门学习

    write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie 讨论新闻组及文件 概要 实际学习使用SDL创建窗体,并绘制图形. 前言 今天想要做一个简单的demo ...

  9. Spark的Streaming和Spark的SQL简单入门学习

    1.Spark Streaming是什么? a.Spark Streaming是什么? Spark Streaming类似于Apache Storm,用于流式数据的处理.根据其官方文档介绍,Spark ...

随机推荐

  1. CSS 框模型

    CSS 框模型 CSS 框模型概述 CSS 内边距 CSS 边框 CSS 外边距 CSS 外边距合并 一,CSS 框模型 (Box Model) 规定元素框处理元素内容.内边距.边框 和 外边距 的方 ...

  2. 浅谈RecyclerView(完美替代ListView,GridView)

    Android RecyclerView 是Android5.0推出来的,导入support-v7包即可使用. 个人体验来说,RecyclerView绝对是一款功能强大的控件. 首先总结下Recycl ...

  3. 【代码笔记】iOS-忘记密码选择整体button

    一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> @class BECheckBox; @interface ...

  4. Android layout_weight理解

    layout_weight属性只能用于LinearLayout布局,不能用于RelativeLayout等其他布局: layout_weight属性如果不设定,默认值为0: layout_weight ...

  5. 0024 Java学习笔记-面向对象-包装类、对象的比较、String常量池问题

    包装类 基本类型-->包装类 byte-->Byte short-->Short int-->Integer long-->Long char-->Characte ...

  6. 原生 CSS 网格布局学习笔记

    下是来自Oliver Williams的帖子. Oliver已经学习了相当长时间的原生CSS网格,可以说是在CSS网格方面有一定的发言权.在这篇文章中,他将以非同寻常的思路分析自己的CSS网格布局学习 ...

  7. Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理3

    首先在webconfig中加入下面这句代码,这个主要是用来生成数据库的连接字符串 <connectionStrings> <add name="AuthorDesignCo ...

  8. sk_buff 里的len, data_len, skb_headlen

    http://blog.csdn.net/kakadiablo/article/details/7948414 struct sk_buff *skb; skb->len 是data长度,包含所 ...

  9. sass入门

    SASS是一种CSS的开发工具,提供了许多便利的写法,大大节省了设计者的时间,使得CSS的开发,变得简单和可维护. SASS 官网介绍: sass is the most mature(成熟的),st ...

  10. Jekyll + Github 搭建属于你的静态博客

    1. 搭建Jekyll环境 linux下jekyll的安装非常简单,这里主要讲一下windows下的jekyll的安装过程 这是一台刚刚装完系统的win10系统,它什么都没有,让我们从零开始. 1.1 ...