栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

.NET IOC框架——Unity容器基础入门

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

.NET IOC框架——Unity容器基础入门

【C#高级语法特性锦集】 https://blog.csdn.net/qq_34202873/article/details/91043366
C# IOC容器Unity 控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。 控制反转一般分为两种类型,依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。依赖注入应用比较广泛。 unity组件网址:http://unity.codeplex.com/ 1. 先加载相关依赖项:NuGet !!关键一点必须注意!! 用Unity.Interception 5.1.0(别用最新的,一大堆神BUG)

总共需要以下四个,直接安装 2. 问题描述 先准备几个类
	/// 
	/// 班级接口
	/// 
	public interface IClass
	{
		string ClassName { get; set; }
		   void ShowInfo();
	}
	/// 
	/// 计科班
	/// 
	public class CbClass : IClass
	{
		public string ClassName { get; set; }
		public void ShowInfo()
		{
			Console.WriteLine("计科班:{0}", ClassName);
		}
	}
	/// 
	/// 电商班
	/// 
	public class EcClass : IClass
	{
		public string ClassName { get; set; }
		public void ShowInfo()
		{
			Console.WriteLine("电商班:{0}", ClassName);
		}
	}
很多人初始化实例的时候就比如这样 
CbClass cbclass = new CbClass();
使用依赖倒置原则的话则是这样
IClass class = new CbClass();
好一点的就再建个简单工厂封装一下
var class = Factory.CreateClass();
3. 问题解决 但类一旦多了以后,每增加类你都得修改工厂,这样就变得很繁杂了,这里使用依赖注入解决这个问题

 public static void ContainerCodeTest1()
{
    IUnityContainer container = new UnityContainer();
//默认注册(无命名),如果后面还有默认注册会覆盖前面的
container.RegisterType<IClass, CbClass>();

//命名注册
container.RegisterType<IClass, EcClass>("ec");

//解析默认对象
IClass cbClass = container.Resolve<IClass>();
cbClass.ShowInfo();

//指定命名解析对象
IClass ecClass = container.Resolve<IClass>("ec");           
ecClass.ShowInfo();

//获取容器中所有IClass的注册的已命名对象
IEnumerable<IClass> classList = container.ResolveAll<IClass>();
foreach (var item in classList)
{
    item.ShowInfo();
}
4. 使用配置文件解决


  
    
数据解析方法
public static void ContainerConfigurationTest1()
{
    IUnityContainer container = new UnityContainer();
    string configFile = "http://www.cnblogs.com/UnityDemo/Constructor/Unity.config";
    var fileMap = new ExeConfigurationFileMap { ExeConfigFilename = configFile };
    //从config文件中读取配置信息
    Configuration configuration =
        ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
    //获取指定名称的配置节
    UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
//载入名称为FirstClass 的container节点
container.LoadConfiguration(section, "FirstClass");

//解析默认对象
IClass cbClass = container.Resolve();
cbClass.ShowInfo();

//指定命名解析对象
IClass ecClass = container.Resolve<IClass>("ec");           
ecClass.ShowInfo();

//获取容器中所有IClass的注册的已命名对象
IEnumerable<IClass> classList = container.ResolveAll<IClass>();
foreach (var item in classList)
{
    item.ShowInfo();
}

文章具体实现代码参考:http://www.cnblogs.com/qqlin/

转载自[C#/.NET IOC框架——Unity容器基础入门](https://blog.csdn.net/qq_34202873/article/details/85042409)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/906514.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号