无名 发表于 2022-5-8 17:33:57

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

什么是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
            {
                thrownew Exception("类型未实现接口");
            }
      }

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

当然这里要实现一个按照XML配置文件来设置对应关系的类也很容易,这里就不实现了。
http://cdn.u1.huluxia.com/g4/M02/95/A1/rBAAdl79NFmAUDJ5AAKqv8KiwVM256.jpg
页: [1]
查看完整版本: 【L·S】IoC原理-使用反射/Emit来实现一个最简单的IoC