zoukankan      html  css  js  c++  java
  • 自己实现一个IOC(控制翻转,DI依赖注入)容器

    1.新建一个控制台应用程序 TestIOC

    2.新增一个 IocFactory类

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Xml;
    using System.Xml.Linq;
    using System.Reflection;
    namespace TestIOC
    {
       public class IocFactory
        {
           private string _path;
           private Dictionary<string, object> dict = new Dictionary<string, object>();
           public IocFactory(string path)
           { 
           
                this._path=path;      
           }
    
    
    
           public object GetObject(string id)
           {
    
               XElement xe = XElement.Load(_path);
    
    
               var v = from c in xe.Elements("object") select c;
    
               dict = v.ToDictionary(k => k.Attribute("id").Value,
    
                   s => {
    
                       string type = s.Attribute("type").Value;
                       Type ty = Type.GetType(type);
                      return Activator.CreateInstance(ty);
                      
                   }
    
                   );
              
               return null;
           }
    
        }
    }

    3.新增一个 PersonDao类

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace TestIOC
    {
       public class PersonDao
        {
    
           public PersonDao()
           {
               Console.WriteLine(" this is PersonDao");
           }
    
    
           public PersonDao(string name)
           {
               Console.WriteLine(" this is PersonDao:"+name);
           }
        }
    }

    4.首先 新建一个object.xml

    <?xml version="1.0" encoding="utf-8" ?>
    
    <objects>
    
      <object id="PersonDao" type="TestIOC.PersonDao, TestIOC" />
    
    </objects>
    

    5.新控制台进行依赖注入

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Reflection;
    namespace TestIOC
    {
        class Program
        {
            static void Main(string[] args)
            {
                string path = @"F:QmytestspringTestIOCTestIOCobject.xml";
                IocFactory ioc = new IocFactory(path);
                PersonDao pd = ioc.GetObject("PersonDao") as PersonDao;
    
    
                Console.WriteLine("直接映射");
    
    
                Activator.CreateInstance(Type.GetType("TestIOC.PersonDao"));
                Console.ReadLine();
            }
        }
    }

    6.显示效果

    this is PersonDao

    直接映射

    this is PersonDao

    源码下载

  • 相关阅读:
    第六节:流上下文
    第五节:控制序列化和反序列化的数据
    第四节:格式化器如何序列化类型实例
    第三节:控制序列化和反序列化
    第二节:使类型可序列化
    第一节:序列化和反序列化快速入门
    第五节:使用反射发现类型成员
    golang 一些坑 rang
    golang json格式字符串反序列化映射到切片结构体
    golang 结构体内嵌结构体序列化填充
  • 原文地址:https://www.cnblogs.com/tiancai/p/4744993.html
Copyright © 2011-2022 走看看