无名商城论坛

搜索
查看: 282|回复: 0

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

[复制链接]

1万

主题

1万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
32464
发表于 2022-5-8 17:33:56 | 显示全部楼层 |阅读模式
.实现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来实例化对象。然后我们可以加上缓存,或者一些策略来控制对象的生命周期,比如是否是单例对象还是每次都生成一个新的对象。
回复

使用道具 举报

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

本版积分规则

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