您的位置:首页 > 编程语言 > Java开发

使用Spring.NET的IoC容器

2012-12-12 14:06 411 查看

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("..........");
}

}

}

}
}


 

4. Demo下载

点此下载

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  IoC OO Spring