欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

.NET Unity IOC框架使用实例详解

程序员文章站 2023-02-21 15:42:59
.net unity ioc框架的使用实例,具体内容如下 1.ioc简介 ioc(inversion of control), 控制反转 di (dependen...

.net unity ioc框架的使用实例,具体内容如下

1.ioc简介

ioc(inversion of control), 控制反转

di (dependency injection),依赖注入

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

2.unity引入

.NET Unity IOC框架使用实例详解

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!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。