使用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. 在IIS服务器上屏蔽IP的访问

    今天就跟大家分享一下在IIS服务器上如何屏蔽特定IP的访问,希望对大家有所帮助. 第一种方法:通过iis中的ip地址和域名限制. 此方法简单有效,建议使用 点击网站--右键属性--目录安全性--IP地 ...

  2. weblogic迁移总结

    weblogic使用的数据库时DB2 1. 图形化安装weblogic和域,或者静默安装. 2. 查看环境变量env并修改,修改系统默认语言(根据实际情况) 3. 修改weblogic页面打开较慢问题 ...

  3. Nginx作为负载均衡器upstream

    Nginx中与proxy模块结合使用的模块中,最常用的当属upstream模块.upstream模块可定义一个新的上下文,它包含了一组upstream服务器,这些服务器可能被赋予了不同的权重.不同的类 ...

  4. C#学习笔记(26)——委托计算器

    说明(2017-11-20 15:14:18): 1. 委托一直稀里糊涂的,有人说简单,有人说难,艹你们! 2. 其实主要是因为,平时不用委托也能解决大部分问题,所以都没有特意去用,网上也没有什么很好 ...

  5. css3 data-attribute属性打造漂亮的按钮

    之前介绍了几款css3实现的按钮,今天为网友来款比较新鲜的,用css3的data-attribute属性开发按钮,当鼠标经过显示按钮的详细信息.而且实现过程很简单,几行代码就搞定.大家试一试吧.如下图 ...

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

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

  7. 【Unity笔记】寻路导航用NavMeshObstacle做动态阻挡

    通常情况下,静态的场景中,给场景物体静态标记中勾选Navigation Static后,在导航界面进行导航网格的烘培,可以得到一个静态的导航网格. 但是由于导航网格是静态烘焙好了的,游戏中动态生成的物 ...

  8. jython 2.7.1 版本开发历史

    很多技术一直感兴趣,在工作中没有太多实践的机会,但可以持续关注.Jython最初是Python on JVM,所以最初的名称是JPython,后续由于基于JVM可以有更多可能性,名字改为Jython. ...

  9. Linxu磁盘分区

    http://vbird.dic.ksu.edu.tw/linux_basic/0130designlinux.php#hardware_know(好文章) http://blog.chinaunix ...

  10. 让jQuery的ajaxFileUpload插件支持onchange事件

    ajaxFileUpload插件只能上传一次的BUG发现还不少人遇到,很不幸我也遇到的,使用后发现里面的坑还不少,在createUploadForm方法中有句 var newElement = jQu ...