Unity的基礎用法
1、創建一個UnityContainer對象。
2、通過UnityContainer對象的RegisterType方法來注冊對象與對象之間的關系。
3、通過UnityContainer對象的Resolve方法來獲取指定對象關聯的對象。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Practices.Unity;
using Microsoft.Practices.Unity.Configuration;
namespace UnityDemo
{
class Program
{
static void Main(string[] args)
{
IUnityContainer container = new UnityContainer();
container.RegisterType<ILogger, ConsoleLogger>();
ILogger logger = container.Resolve<ILogger>();
logger.Log("hello world");
Console.ReadLine();
}
}
}
有兩種方式使用RegisterType,一種是代碼,類似於ontainer.RegisterType<ILogger, ConsoleLogger>();
一種是通過配置文件
通過配置文件,需要引用Unity.Configuration類庫,System.configuration類庫為了避免xml輸入錯誤,可以通過XSD文件開啟智能感應,有下面兩種方式
方式1、在Visual Studio中選擇XML選項卡,然后選擇Schemas選項,在里面找到UnityConfiguration20.xsd文件,選擇使用
方式2、直接在XML配置文件中輸入<unity xmlns=",然后在彈出的提示中選擇http://schemas.microsoft.com/practices/2010/unity
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration"/>
</configSections>
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<container>
<register type="UnityDemo.ILogger,UnityDemo" mapTo="UnityDemo.FileLogger,UnityDemo"></register>
</container>
</unity>
</configuration>
當配置過多是,可以單獨建個unity.config
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Practices.Unity;
using Microsoft.Practices.Unity.Configuration;
using System.Configuration;
namespace UnityDemo
{
class Program
{
static void Main(string[] args)
{
IUnityContainer container = new UnityContainer();
UnityConfigurationSection section = GetUnityConfigurationSection("unity.config");
container.LoadConfiguration();
ILogger logger = container.Resolve<ILogger>();
logger.Log("hello world");
Console.ReadLine();
}
public static UnityConfigurationSection GetUnityConfigurationSection(string configFile)
{
var fileMap = new ExeConfigurationFileMap { ExeConfigFilename = HttpContext.Current.Server.MapPath(configFile) };
Configuration configuration =ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
return (UnityConfigurationSection)configuration.GetSection("unity");
}
}
}
的配置文件中,要求類型一定要寫成型如:“namespace.typename,assemblyname”的類型全名。這使得的配置文件一下子變的非常臃腫,難以維護。在Unity中提供了一種名為Automatic Type Lookup的機制來解決這一問題
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration"/>
</configSections>
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<namespace name="UnityDemo"/>
<assembly name="UnityDemo"/>
<container>
<register type="ILogger" mapTo="FileLogger"></register>
</container>
</unity>
</configuration>
