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

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

.实现IoCContainerManager public class IoCContainerManager    {      ///         /// 容器      ///         private static IIoCContainer _container;      ///         /// 获取IOC容器      ///         /// ioc配置      ///         public static IIoCContainer GetIoCContainer(IIoCConfig config)      {                           if (_container==null)                {                  //反射方式                  _container = new ReflectionContainer(config);                  //EMIT方式                   // _container=new EmitContainer(config);                }                return _container;                  }    }代码太简单,不多说了。 使用public interface ITest    {      void DoWork();    }    public class Test:ITest    {      public void DoWork()      {         Console.WriteLine("do work!");      }    }    class Program    {      static void Main(string[] args)      {            IIoCConfig config = new IoCConfig();            config.AddConfig();//添加配置            //获取容器            IIoCContainer container = IoCContainerManager.GetIoCContainer(config);            //根据ITest接口去获取对应的实例            ITest test = container.Get();            test.DoWork();            Console.Read();      }    }输出:image这里手动使用IoC容器去获取对应的实例对象,我们也可以配合特性来使代码更加简单。这里就不实现了。总结通过这么短短的几行代码。我们实现了一个最最简单的IoC容器。它可以实现构造函数注入(默认无参)。但是这就已经揭示了IoC框架最本质的东西:反射或者EMIT来实例化对象。然后我们可以加上缓存,或者一些策略来控制对象的生命周期,比如是否是单例对象还是每次都生成一个新的对象。
http://cdn.u1.huluxia.com/g4/M02/95/A1/rBAAdl79NLSAdwuPAAKqv8KiwVM182.jpg
页: [1]
查看完整版本: 【L·S】IoC原理-使用反射/Emit来实现一个最简单的Io2