.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. 问题描述

先准备几个类

	/// <summary>
	/// 班级接口
	/// </summary>
	public interface IClass
	{
		string ClassName { get; set; }
		   void ShowInfo();
	}
	/// <summary>
	/// 计科班
	/// </summary>
	public class CbClass : IClass
	{
		public string ClassName { get; set; }
		public void ShowInfo()
		{
			Console.WriteLine("计科班:{0}", ClassName);
		}
	}
	/// <summary>
	/// 电商班
	/// </summary>
	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&lt;IClass, CbClass&gt;();

//命名注册
container.RegisterType&lt;IClass, EcClass&gt;("ec");

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

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

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

4. 使用配置文件解决

<?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">
    <!--定义类型别名-->
    <aliases>
      <add alias="IClass" type="ConsoleApplication1.UnityDemo.IClass,ConsoleApplication1" />
      <add alias="CbClass" type="ConsoleApplication1.UnityDemo.CbClass,ConsoleApplication1" />
      <add alias="EcClass" type="ConsoleApplication1.UnityDemo.EcClass,ConsoleApplication1" />
    </aliases>
    <!--容器-->
    <container name="FirstClass">
      <!--映射关系-->
      <register type="IClass"  mapTo="CbClass"></register>
      <register type="IClass" name="ec" mapTo="EcClass"></register>
    </container>
  </unity>
</configuration>

数据解析方法

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<IClass>();
cbClass.ShowInfo();

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

//获取容器中所有IClass的注册的已命名对象
IEnumerable&lt;IClass&gt; classList = container.ResolveAll&lt;IClass&gt;();
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)
  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 47
    评论
自己动手做框架是一种非常有挑战性的任务,尤其是对于 ORM(对象关系映射)、MVC(模型-视图-控制器)和IOC(控制反转)这三个框架而言。以下是对这三个框架的简要介绍,以及它们的实现过程。 首先,ORM(对象关系映射)框架是用于将数据库中的表映射为对象的一种技术。在实现ORM框架时,需要定义对象和表之间的映射关系,并提供相应的API来进行数据库的增删改查操作。还需要处理对象之间的关联关系(如一对一、一对多等),并提供事务管理、缓存等功能。 其次,MVC(模型-视图-控制器)框架是一种用于开发Web应用程序的架构模式,将应用程序分为模型、视图和控制器三层。在实现MVC框架时,需要定义模型、视图和控制器的接口,并提供相应的实现。模型负责处理数据逻辑,视图负责展示用户界面,而控制器则负责接收用户请求并进行处理,最后将结果返回给视图进行展示。 最后,IOC(控制反转)框架是一种通过依赖注入来管理对象之间的依赖关系的技术。在实现IOC框架时,需要定义依赖注入的规则,并提供相应的实现。可以使用反射机制来自动实例化对象,并将依赖的对象注入到目标对象中。还需要提供对象的生命周期管理(如单例模式、原型模式等)和对象的配置方式(如XML配置、注解配置等)。 总结来说,自己动手实现ORM、MVC和IOC框架需要掌握相关的技术和知识,并具备良好的设计和编码能力。除了理论知识外,还需要具备实际项目的经验,以便能够更好地设计和实现这些框架。同时,也需要不断学习和改进,跟上技术的发展潮流,以确保框架的高效和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 47
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值