Unity IOC框架使用实例

1.IOC简介

IOC(Inversion of Control), 控制反转

DI (Dependency Injection),依赖注入

IOC的基本概念是:不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务。容器负责将这些联系在一起。

2.Unity引入

3.创建单例模式容器类

using Microsoft.Practices.Unity;
using Microsoft.Practices.Unity.Configuration;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace UnityIocTest
{
    /// <summary>
    /// Unity IOC单例模式
    /// </summary>
    public class UnitySingleton
    {
        //单例
        private static UnitySingleton instance;

        //ioc容器
        public IUnityContainer container;

        //获取单例
        public static UnitySingleton getInstance()
        {
            if (instance == null || instance.container == null)
            {
                string configFile = "Unity.config";
                var fileMap = new ExeConfigurationFileMap { ExeConfigFilename = configFile };
                //从config文件中读取配置信息
                Configuration configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
                //获取指定名称的配置节
                UnityConfigurationSection section = (UnityConfigurationSection)configuration.GetSection("unity");
                instance = new UnitySingleton()
                {
                    //container = new UnityContainer().LoadConfiguration((UnityConfigurationSection)ConfigurationManager.GetSection("unity"), "MyContainer")
                    container = new UnityContainer().LoadConfiguration(section, "MyContainer")
                    //container = new UnityContainer()
                };
                //instance.container.RegisterType<IExampleClass, ExampleClass>();
            }
            return instance;
        }

        //IOC注入实体
        public static T GetInstanceDAL<T>()
        {
            return getInstance().container.Resolve<T>();
        }
    }
}

此处是将Unity config配置单独成一个文件,方便管理。

4.添加IOC相关类

接口类

public interface IExampleClass
{
    void DoHelloWord();
}

具体实现类

    public class ExampleClass : IExampleClass
    {
        public void DoHelloWord()
        {
            Console.WriteLine("Hello Word!");
        }
    }

实现类扩展

    public class DIExampleClass
    {
        //属性注入
        [Dependency]
        public IExampleClass example { get; set; }

        private IExampleClass testInject;

        public void DoWork()
        {
            example.DoHelloWord();
            testInject.DoHelloWord();
        }

        //方法注入
        [InjectionMethod]
        public void Initialize(IExampleClass instance)
        {
            testInject = instance;
        }
    }

 

5.添加配置文件Unity.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration" />
  </configSections>
  <unity>
    <!--定义类型别名-->
    <aliases>
      <add alias="IExampleClass" type="UnityIocTest.IExampleClass,UnityIocTest" />
      <add alias="ExampleClass" type="UnityIocTest.ExampleClass,UnityIocTest" />
    </aliases>
    <!--容器-->
    <container name="MyContainer">
      <!--映射关系-->
      <!--<register type="IExampleClass"  mapTo="ExampleClass"></register>-->
      <register type="UnityIocTest.IExampleClass,UnityIocTest"  mapTo="UnityIocTest.ExampleClass,UnityIocTest"></register>
    </container>
  </unity>
</configuration>

 

6.函数调用

    class Program
    {
        static void Main(string[] args)
        {
            //var dao = UnitySingleton.GetInstanceDAL<IExampleClass>();
            var dao = UnitySingleton.GetInstanceDAL<DIExampleClass>();
            dao.DoWork();
            Console.ReadLine();
        }
    }

 

7.结果显示

Hello Word!

Hello Word!

原文地址:https://www.cnblogs.com/sylone/p/9483511.html

时间: 2025-01-13 18:18:44

Unity IOC框架使用实例的相关文章

今天研究Unity Ioc 框架

今天研究Unity Ioc 框架,被自己坑了两个多小时. 运行就报错,反反复复检查了很多次,配置文件,代码都没有问题,也从新写了好几遍. 最后仔细看报错消息才知道,config文件没有生成到目录----  -_- 各路大神,引以为鉴呀!

MVC4 基于 Unity Ioc 框架的 ControllerFactory

首先引入Untiy框架. 可以在NuGet程序包 管理器中直接安装. 新建 继承DefaultControllerFactory  的UnityControllerFactory: 重写虚方法GetControllerInstance. public class UnityControllerFactory : DefaultControllerFactory { public IUnityContainer UnityContainer { get; private set; } public

IOC框架之Unity

一.IOC介绍 IOC(Inversion of Control),中文译为控制反转,又称为“依赖注入”(DI =Dependence Injection) IOC的基本概念是:不创建对象,但是描述创建它们的方式.在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务.容器负责将这些联系在一起. 其原理是基于OO设计原则的The Hollywood Principle:Don't call us, we'll call you(别找我,我会来找你的).也就是说,所有的组件都是

Unity IOC/DI使用

一.IOC介绍 IOC(Inversion of Control),中文译为控制反转,又称为“依赖注入”(DI =Dependence Injection) IOC的基本概念是:不创建对象,但是描述创建它们的方式.在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务.容器负责将这些联系在一起. 其原理是基于OO设计原则的The Hollywood Principle:Don't call us, we'll call you(别找我,我会来找你的).也就是说,所有的组件都是

IOC框架之AutoFac简介

一.为什么使用AutoFac? 之前介绍了Unity和Ninject两个IOC容器,但是发现园子里用AutoFac的貌似更为普遍,于是捯饬了两天,发现这个东东确实是个高大上的IOC容器~ Autofac是.NET领域最为流行的IOC框架之一,传说是速度最快的一个: 优点: 它是C#语言联系很紧密,也就是说C#里的很多编程方式都可以为Autofac使用,例如可以用Lambda表达式注册组件 较低的学习曲线,学习它非常的简单,只要你理解了IoC和DI的概念以及在何时需要使用它们 XML配置支持 自动

Unity MVC框架 StrangeIoC

http://blog.csdn.net/akof1314/article/details/26500871 StrangeIoC是一个超轻量级和高度可扩展的控制反转(IoC)框架,专门为C#和Unity编写. 项目地址:https://github.com/strangeioc/strangeioc 文档地址:http://strangeioc.github.io/strangeioc/TheBigStrangeHowTo.html 一些术语:http://strangeioc.github.

PHP的高效IOC框架——CanoeDI

PHP的高效IOC框架--CanoeDI 一个非常简单且实用的IoC框架,相对于其他的Ioc框架有如下特点: 高效: 框架使用了非常实用且高效的算法,使得框架本身对应用的影响微乎其微,且框架提供了C扩展,最大限度的将性能提升到最高. 配置简单: 大多数情况下几乎不需要额外的配置 自动装配: 基于PHPDocument的property属性来自动装配 懒加载: 所有被注入的变量的实例都为即用即取, 不会产生内存垃圾 IDE友好: 因为利用的是PHP的标准规范, 兼容大部分IDE 安装 编译安装,可

java轻量级IOC框架Guice

Guice是由Google大牛Bob lee开发的一款绝对轻量级的java IoC容器.其优势在于: 速度快,号称比spring快100倍. 无外部配置(如需要使用外部可以可以选用Guice的扩展包),完全基于annotation特性,支持重构,代码静态检查. 简单,快速,基本没有学习成本. Guice和spring各有所长,Guice更适合与嵌入式或者高性能但项目简单方案,如OSGI容器,spring更适合大型项目组织. 注入方式 在我们谈到IOC框架,首先我们的话题将是构造,属性以及函数注入

大话spring.net之IOC框架的简单搭建

讲了这么多理论,我们来手动实现一个简易的IoC框架的,这样可以加深IoC的理论知识. 一.思路 在我们使用Spring.NET框架的时候,首先需要实例化Spring.NET容器, 然后调用IoC容器IObjectFactory接口中GetObject方法获取容器中的对象.通过这一点就可以告诉我们制作IoC容器需要写一个获取XML文件内容的方法和申明一个Dictionary<string, object>来存放IoC容器中的对象,还需要写一个能从Dictionary<string, obj