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

    源码下载

  • 相关阅读:
    LINQTOSQL作为底层ORM框架后,我们的数据基类就变成了这个样子
    一個傳統的C2C網站的用戶充值的过程
    ajax跨域获取数据
    C#+HTML+JS生成的树完整代码
    核心Swing组件(六)
    Swing组件集合的事件处理(六)
    Swing组件集合的事件处理(四)
    核心Swing组件(四)
    核心Swing组件(三)
    核心Swing组件(五)
  • 原文地址:https://www.cnblogs.com/tiancai/p/4744993.html
Copyright © 2011-2022 走看看