1.Install:
Install-Package Unity.Container Install-Package Unity.Interception Install-Package Unity.Configuration
2.Unity.config:
configuration => configurations: 声明container
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Unity.Configuration"/>
configuration => unity: 定义container
<containers> <container name="DbContainer">
<!--注册类写在此处-->
</container> </containers>
简单注册类:name在同一处理程序中可以注册多个相同类型的类信息
<register type="Namespace.Interface,Assembly" mapTo="Namespace.ClassName,Assembly" name="paramName">
简单注册类应用
var instance = container.Resolve<InterfaceName>("paramName");
构造函数实例配置信息
<register type="DB.Interface.IDb,DB.Interface" mapTo="DB.MSSQL, DB.MSSQL" name="mssql"> <constructor> <param name="param" type="paramType" value="default value" /> </constructor> </register>
泛型类配置
<register type="Namespace.Interface.IGeneric[],Assembly" mapTo="Namespace.MyGeneric[],Assembly" />
泛型接口类
public interface IGeneric<T> {
……
}
public class MyGeneric<T>: IGeneric<T>
{
……
}
泛型接口类应用
IGeneric<int> generic = container.Resolve<IGeneric<int>>();
3.Simple demo:
ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap { ExeConfigFilename = Path.Combine($"{AppDomain.CurrentDomain.BaseDirectory }unity.config") }; Configuration configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); UnityConfigurationSection section = (UnityConfigurationSection)configuration.GetSection(UnityConfigurationSection.SectionName); //创建容器 IUnityContainer container = new UnityContainer(); section.Configure(container, "DbContainer");
to be continued...
public interface IGeneric<T>