使用Spring.NET的IoC容器

0. 辅助类库

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace SpringDemo.Pub
{
public static class Pub
{ public static string ServiceNameA = "SpringDemo.Lib.Oracle.OracleDatabase";
public static string ServiceNameB = "SpringDemo.Lib.Sql.SqlDatabase"; public static string FullNameA = "SpringDemo.Lib.Oracle.OracleDatabase, SpringDemo.Lib.Oracle";
public static string FullNameB = "SpringDemo.Lib.Sql.SqlDatabase, SpringDemo.Lib.Sql"; public static Type TypeA = Type.GetType(FullNameA);
public static Type TypeB = Type.GetType(FullNameB); }
}

1. 使用代码方式进行组件注册【依赖服务类】

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; using SpringDemo.Lib; using Spring.Core;
using Spring.Context;
using Spring.Context.Support;
using Spring.Objects.Factory.Support; namespace SpringDemo.Lib.Mgr
{
/// <summary>
/// 管理类
/// </summary>
public partial class Mgr
{
private static IApplicationContext container = null; /// <summary>
/// 自定义容器和组件注册
/// </summary>
/// <returns></returns>
public static IApplicationContext GetContainer()
{ if (container == null)
{ IObjectDefinitionFactory factory = new DefaultObjectDefinitionFactory();
AbstractObjectDefinition defiA = factory.CreateObjectDefinition(SpringDemo.Pub.Pub.FullNameA, null, AppDomain.CurrentDomain);
AbstractObjectDefinition defiB = factory.CreateObjectDefinition(SpringDemo.Pub.Pub.FullNameB, null, AppDomain.CurrentDomain); //建立容器
GenericApplicationContext tmpContainer = new GenericApplicationContext();
tmpContainer.RegisterObjectDefinition(SpringDemo.Pub.Pub.ServiceNameA, defiA);
tmpContainer.RegisterObjectDefinition(SpringDemo.Pub.Pub.ServiceNameB, defiB); container = tmpContainer; }
return container;
}
}
}

2. 使用代码方式进行组件注册【不需要依赖】【类似反射的全字符串形式】

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; using Spring.Core;
using Spring.Context;
using Spring.Context.Support;
using Spring.Objects.Factory.Support; using SpringDemo.Lib;
namespace SpringDemo.Lib.Container
{
/// <summary>
/// 管理类
/// </summary>
public partial class Container
{
private static IApplicationContext container = null; /// <summary>
/// 自定义容器和组件注册
/// </summary>
/// <returns></returns>
public static IApplicationContext GetContainer()
{ if (container == null)
{
IObjectDefinitionFactory factory = new DefaultObjectDefinitionFactory();
AbstractObjectDefinition defiA = factory.CreateObjectDefinition(SpringDemo.Pub.Pub.FullNameA, null, AppDomain.CurrentDomain);
AbstractObjectDefinition defiB = factory.CreateObjectDefinition(SpringDemo.Pub.Pub.FullNameB, null, AppDomain.CurrentDomain); //建立容器
GenericApplicationContext tmpContainer = new GenericApplicationContext();
tmpContainer.RegisterObjectDefinition(SpringDemo.Pub.Pub.ServiceNameA, defiA);
tmpContainer.RegisterObjectDefinition(SpringDemo.Pub.Pub.ServiceNameB, defiB); container = tmpContainer; }
return container;
}
}
}

3.  使用配置文件进行组件注册【不需要依赖】

3.1.  定义配置文件

<?xml version="1.0"?>
<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="assembly://FirstSpringNetApp/FirstSpringNetApp/Objects.xml"/>-->
<resource uri="config://spring/objects" />
</context>
<objects xmlns="http://www.springframework.net">
<object id="SpringDemo.Lib.Oracle.OracleDatabase" type="SpringDemo.Lib.Oracle.OracleDatabase, SpringDemo.Lib.Oracle" singleton="false" />
<object id="SpringDemo.Lib.Sql.SqlDatabase" type="SpringDemo.Lib.Sql.SqlDatabase, SpringDemo.Lib.Sql" singleton="false" />
</objects>
</spring> <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>

3.2. 读取config配置文件进行组件注册

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; using SpringDemo.Lib; using Spring.Core;
using Spring.Context;
using Spring.Context.Support; namespace SpringDemo.Run
{
public partial class Helper
{ /// <summary>
/// 根据配置文件里的服务名生成对象
/// </summary>
public static void GetFrom_Config(string vServiceName)
{ IApplicationContext container = ContextRegistry.GetContext(); if (container != null)
{
IDatabase db = null;
//db = container.GetObject(vServiceName) as IDatabase;
db = container.GetObject<IDatabase>(vServiceName); ;
if (db != null)
{
db.Select("..........");
} } } }
}

使用Spring.NET的IoC容器的更多相关文章

  1. 比Spring简单的IoC容器

    比Spring简单的IoC容器 Spring 虽然比起EJB轻量了许多,但是因为它需要兼容许多不同的类库,导致现在Spring还是相当的庞大的,动不动就上40MB的jar包, 而且想要理解Spring ...

  2. Spring.NET的IoC容器(The IoC container)——简介(Introduction)

    简介 这个章节介绍了Spring Framework的控制反转(Inversion of Control ,IoC)的实现原理. Spring.Core 程序集是Spring.NET的 IoC 容器实 ...

  3. Spring Framework------>version4.3.5.RELAESE----->Reference Documentation学习心得----->使用spring framework的IoC容器功能----->方法一:使用XML文件定义beans之间的依赖注入关系

    XML-based configuration metadata(使用XML文件定义beans之间的依赖注入关系) 第一部分 编程思路概述 step1,在XML文件中定义各个bean之间的依赖关系. ...

  4. Spring框架学习[IoC容器高级特性]

    1.通过前面4篇文章对Spring IoC容器的源码分析,我们已经基本上了解了Spring IoC容器对Bean定义资源的定位.读入和解析过程,同时也清楚了当用户通过getBean方法向IoC容器获取 ...

  5. Spring基础——在 IOC 容器中 Bean 之间的关系

    一.在 Spring IOC 容器中 Bean 之间存在继承和依赖关系. 需要注意的是,这个继承和依赖指的是 bean 的配置之间的关系,而不是指实际意义上类与类之间的继承与依赖,它们不是一个概念. ...

  6. Spring框架及IOC容器

    Spring是一个非常活跃的开源框架, 它是一个基于IOC和AOP来构架多层JavaEE系统的框架,它的主要目地是简化企业开发.Spring以一种非侵入式的方式来管理你的代码, Spring提倡”最少 ...

  7. 【Spring】Spring之向 IOC 容器注入对象的三种方式

    关于Spring的搭建可参见:浅析Spring框架的搭建.在测试之前还是应该先将环境配置好,将相关Jar包导进来.Spring创建的对象,默认情况下都是单例模式,除非通过scope指定. 向IOC容器 ...

  8. Spring系列之IOC容器

    一.概述 IOC容器就是具有依赖注入功能的容器,IOC容器负责实例化.定位.配置应用程序中的对象及建立这些对象之间的依赖.应用程序无需直接在代码中new 相关的对象,应用程序由IOC容器进行组装.在S ...

  9. 重新学习Spring之核心IOC容器的底层原理

    一:IOC容器的定义 控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心. 控制反转一般 ...

随机推荐

  1. 玩转Bootstrap(JS插件篇)-第1章 模态弹出框 :1-3 模态弹出框

    模态弹出框(Modals) 这一小节我们先来讲解一个“模态弹出框”,插件的源文件:modal.js. 右侧代码编辑器(30行)就是单独引入 bootstrap 中发布出的“modal.js”文件. 样 ...

  2. java double类型保留两位小数4种方法

    http://blog.csdn.net/huaishuming/article/details/17752365 ****************************************** ...

  3. hdu1599(无向图的最小环模板)

    题意:杭州有N个景区,景区之间有一些双向的路来连接,现在8600想找一条旅游路线,这个路线从A点出发并且最后回到A点,假设经过的路线为V1,V2,....VK,V1,那么必须满足K>2,就是说至 ...

  4. SQL Server 数据库自建表

    sysobjects是系统自建的表,里面存储了在数据库内创建的每个对象(约束.默认值.日志.规则.存储过程等). 列名 数据类型 描述 name sysname 对象名 id int 对象标识号 xt ...

  5. iOS 设置导航栏全透明

    - (void)viewWillAppear:(BOOL)animated{ //设置导航栏背景图片为一个空的image,这样就透明了 [self.navigationController.navig ...

  6. SP_OACreate提权经验

    在xp_cmdshell被删除或者出错情况下,可以充分利用SP_OACreate进行提权   首先   EXEC sp_configure 'show advanced options', 1;   ...

  7. SQL中的DML、DDL以及DCL是什么?

    DML(data manipulation language)是数据操纵语言:它们是SELECT.UPDATE.INSERT.DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的 ...

  8. JMX超详细解读<转>

    一.JMX的定义 JMX(Java Management Extensions)是一个为应用程序植入管理功能的框架.JMX是一套标准的代理和服务,实际上,用户可以在任何Java应用程序中使用这些代理和 ...

  9. 修复Windows10系统的注册表?

    在打开的管理员命令提示符窗口,输入如下命令: ———————————————————————————————— reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Mi ...

  10. 微软开放了.NET 4.5.1的源代码

    您目前处于: InfoQ首页 新闻 微软开放了.NET 4.5.1的源代码   微软开放了.NET 4.5.1的源代码 作者 姚琪琳 发布于 二月 26, 2014 | 1 讨论 新浪微博腾讯微博豆瓣 ...