|
.实现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来实例化对象。然后我们可以加上缓存,或者一些策略来控制对象的生命周期,比如是否是单例对象还是每次都生成一个新的对象。
|
|