首先来了解IOC
控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。 控制反转一般分为两种类型,依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。依赖注入应用比较广泛。
为了是应用能有更好的扩展性,IOC容器必不可少,这里选用的是Unity 2.0.x作为IOC的容器,如下:
/// <summary>
/// IOC 容器
/// </summary>
public static class Container
{
const string CONTAINER_NAME = "agile";
static Lazy<IUnityContainer> _current;
static UnityConfigurationSection _section;
public static void Setup(string file)
{
var config = ConfigManager.Create(file);
Setup(config);
}
public static void Setup(ConfigManager config)
{
_section = config.GetSection("unity") as UnityConfigurationSection;
}
static Container()
{
_current = new Lazy<IUnityContainer>(Create);
}
/// <summary>
/// 创建一个子容器
/// </summary>
/// <returns></returns>
public static IUnityContainer CreateChildContainer()
{
return Current.CreateChildContainer();
}
/// <summary>
/// 创建一个新的容器
/// </summary>
/// <returns></returns>
public static IUnityContainer CreateContainer()
{
return new UnityContainer();
}
static IUnityContainer Create()
{
var current = new UnityContainer();
try
{
if (_section != null)
current.LoadConfiguration(_section, CONTAINER_NAME);
else
current.LoadConfiguration(CONTAINER_NAME);
}
catch (System.Configuration.ConfigurationErrorsException ce)
{
throw new System.Configuration.ConfigurationErrorsException("Unity配置错误,请确认配置文件中存在Unity配置节", ce);
}
catch (ArgumentNullException)
{
}
catch
{
throw;
}
_section = null;
return current;
}
/// <summary>
/// Unity容器<see cref="Microsoft.Practices.Unity.IUnityContainer"/>
/// </summary>
public static IUnityContainer Current
{
get
{
return _current.Value;
}
}
}