自己实现一个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

1
2
3
4
5
6
7
<?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:\Q\mytest\spring\TestIOC\TestIOC\object.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

 

源码下载

posted @   甜菜波波  阅读(622)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示