无名商城论坛

搜索
查看: 212|回复: 0

[其他技术] 【L·S】IoC原理-使用反射/Emit来实现一个最简单的IoC

[复制链接]

1万

主题

1万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
32464
发表于 2022-5-8 17:33:57 | 显示全部楼层 |阅读模式
什么是IoC
IoC是英文Inversion of Control的缩写。我们一般叫它“控制反转”。IoC技术是用来解决面向对象设计一大原则依赖倒置而出现的技术。可以更好的实现面向接口编程,来使各个组件之间解耦。

IoC的实现原理
.NET IoC容器的一般就是两种,一是反射,二是使用Emit来直接写IL。

废话不多了,想要了解跟多的IoC的知识请Google。
1.定义IIoCConfig接口
  public interface IIoCConfig
    {
        void AddConfig();

        Dictionary ConfigDictionary { get; }
    }

2.定义IoCConfig实现
   public class IoCConfig:IIoCConfig
    {
        ///
        /// 存放配置的字典对象,KEY是接口类型,VALUE是实现接口的类型
        ///
        private Dictionary _configDictionary=new Dictionary();

        ///
        /// 添加配置
        ///
        /// 接口
        /// 实现接口的类型
        public void AddConfig()
        {
            //判断TType是否实现TInterface
            if (typeof(TInterface).IsAssignableFrom(typeof(TType)))
            {
                _configDictionary.Add(typeof(TInterface), typeof(TType));
            }
            else
            {
                throw  new Exception("类型未实现接口");
            }
        }

        public Dictionary ConfigDictionary
        {
            get
            {
                return _configDictionary;
            }
        }
    }
使用一个字典来保存Interface跟Class的对应关系。这里是仿造Ninject的配置方式,使用代码来配置。这种配置方式有个好处就是不会写错,因为有IDE来给你检查拼写错误。不要小看这个好处,当你有上百个注入对象的时候,使用Unity的XML来配置对应关系的时候很容易就会发生拼写错误。这种错误往往还很难发现。

当然这里要实现一个按照XML配置文件来设置对应关系的类也很容易,这里就不实现了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表