2.自己搭建的一个简易的ioc容器
1.persondao类
namespace MyselfIoC
{
    public class PersonDao
    {
        public override string ToString()
        {
            return "我是PersonDao";
        }
    }
}
2.xml 工厂文件
<?xml version="1.0" encoding="utf-8" ?>
<objects>
<object id="PersonDao" type="MyselfIoC.PersonDao, MyselfIoC" />
  
</objects>
3.工厂ioc 构造函数实例化一个ioc工厂的字典
namespace MyselfIoC
{
    public class MyXmlFactory
    {
        private IDictionary<string, object> objectDefine = new Dictionary<string, object>();
public MyXmlFactory(string fileName)
        {
//构造函数实例IoC容器
            InstanceObjects(fileName);  // 实例IoC容器
        }
/// <summary>
        /// 实例IoC容器
        /// </summary>
        /// <param name="fileName"></param>
        private void InstanceObjects(string fileName)
        {
            XElement root = XElement.Load(fileName);
            var objects = from obj in root.Elements("object") select obj; 
            objectDefine = objects.ToDictionary(
                    k => k.Attribute("id").Value, 
                    v => 
                    {
                        string typeName = v.Attribute("type").Value;  
                        Type type = Type.GetType(typeName);  
                        return Activator.CreateInstance(type);
                    }
                );
        }
/// <summary>
        /// 获取对象
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public object GetObject(string id)
        {
            object result = null;
if (objectDefine.ContainsKey(id))
            {
//通过字典获取对象的实例
                result = objectDefine[id];
            }
return result;
        }
    }
}
4.调用部分
namespace MyselfIoC
{
    class Program
    {
        static void Main(string[] args)
        {
            AppRegistry();
            Console.ReadLine();
        }
static void AppRegistry()
        {
            MyXmlFactory ctx = new MyXmlFactory(@"D:\Objects.xml");
            Console.WriteLine(ctx.GetObject("PersonDao").ToString());
        }
    }
}
2.自己搭建的一个简易的ioc容器的更多相关文章
- 自己实现IOC容器,java代码实现简易版IOC容器,IOC容器实现的步骤分解
		
一.需求 实现一个简易的IOC容器,管理Bean,从IOC容器的BeanFactory中获取实例,从而取代自己new实例的做法. 二.实现步骤分析 三.具体代码实现 自定义注解类 MyComponen ...
 - 手写一个简易的IOC
		
这个小项目是我读过一点Spring的源码后,模仿Spring的IOC写的一个简易的IOC,当然Spring的在天上,我写的在马里亚纳海沟,哈哈 感兴趣的小伙伴可以去我的github拉取代码看着玩 地址 ...
 - 探秘Tomcat——一个简易的Servlet容器
		
即便再简陋的服务器也是服务器,今天就来循着书本的第二章来看看如何实现一个servlet容器. 背景知识 既然说到servlet容器这个名词,我们首先要了解它到底是什么. servlet 相比你或多或少 ...
 - DI 原理解析 并实现一个简易版 DI 容器
		
本文基于自身理解进行输出,目的在于交流学习,如有不对,还望各位看官指出. DI DI-Dependency Injection,即"依赖注入":对象之间依赖关系由容器在运行期决定, ...
 - .NET实现一个简单的IOC容器
		
目录 1.主要细节 2.具体示例 参考及示例代码下载 shanzm-2020年3月17日 20:06:01 1.主要细节 使用反射程序集的方式获取对象的类型 通过反射的方式获取指定类型的的所有公共属性 ...
 - 自己动手实现一个简单的 IOC容器
		
控制反转,即Inversion of Control(IoC),是面向对象中的一种设计原则,可以用有效降低架构代码的耦合度,从对象调用者角度又叫做依赖注入,即Dependency Injection( ...
 - ASP.NET Core本身已经集成了一个轻量级的IOC容器
		
1.services.AddTransient<IApplicationService,ApplicationService>//服务在每次请求时被创建,它最好被用于轻量级无状态服务(如我 ...
 - 曹工说Tomcat4:利用 Digester 手撸一个轻量的 Spring IOC容器
		
一.前言 一共8个类,撸一个IOC容器.当然,我们是很轻量级的,但能够满足基本需求.想想典型的 Spring 项目,是不是就是各种Service/DAO/Controller,大家互相注入,就组装成了 ...
 - 自定义模拟一个Spring IOC容器
		
一.模拟一个IOC容器: 介绍:现在,我们准备使用一个java project来模拟一个spring的IOC容器创建对象的方法,也就是不使用spring的jar自动帮助我们创建对象,而是通过自己手动书 ...
 
随机推荐
- selenium+python自动化93-Chrome报错:Python is likely shutting down
			
遇到问题 报错信息:sys.meta_path is None, Python is likely shutting down 1.我的环境: python 3.6 selenium 2.53.6 c ...
 - leetcode344
			
public class Solution { public string ReverseString(string s) { var list = s.Reverse(); StringBuilde ...
 - sts安装出现could not find jar:file解决办法
			
转自:https://blog.csdn.net/weixin_43702329/article/details/84823912 标题sts插件下载好但是安装出错 我的eclipse是4.5.2,在 ...
 - 微信公众平台开发者认证,node
			
纯属分享 app.js var express = require('express'); var path = require('path'); var app = express(); ; var ...
 - Redis 安装 和 启动
			
Redis下载官网 http://download.redis.io/releases/ 本人下载了stable版 1:安装步骤 ># wget http://download.redis.i ...
 - chrome 常用插件下载安装
			
可在google的应用商店进行下载:chrome://apps/ 但大多时间无法链接. 国内插件下载地址: http://www.cnplugins.com http://chromecj.com/ ...
 - rabbitmq  /usr/lib/rabbitmq/bin/rabbitmq-server: line 85: erl: command not found
			
问题描述:在使用命令/sbin/service rabbitmq-server start启动Rabbitmq时,报: Job for rabbitmq-server.service failed b ...
 - 基于Sentinel的Redis3.2高可用方案
			
默认情况下,Redis node和sentinel的protected-mode都是yes,在搭建集群时,若想从远程连接redis集群,需要将redis.conf和sentinel.conf的prot ...
 - Spoon新建repository的时候
			
Spoon新建repository的时候,下面选项选择‘否’,不要选择‘是’,不然可能会出错.
 - 初始化centoS 相关
			
install aspnetcoremodule for iis https://docs.microsoft.com/en-us/aspnet/core/publishing/iis?tabs=as ...