zoukankan      html  css  js  c++  java
  • .NET 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!

  • 相关阅读:
    java 实现N进制转M进制
    BigInteger构造函数解析
    SpringBoot 实现前后端分离的跨域访问(CORS)
    python:[numpy] ndarray 与 list 互相转换
    PyTorch使用GPU的方法
    Matplotlib.pyplot 把画图保存为图片 指定图片大小
    python列表中的所有值转换为字符串,以及列表拼接成一个字符串
    python 读取中文文件名/中文路径
    在Python中使用LSTM和PyTorch进行时间序列预测(深度学习时序数据预测)
    记录分析python程序运行时间的几种方法
  • 原文地址:https://www.cnblogs.com/pengdylan/p/6371724.html
Copyright © 2011-2022 走看看