Unity 使用

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>
posted @ 2022-05-30 21:10  xmllxm  阅读(61)  评论(0)    收藏  举报