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下载