/// <summary> /// 简单的依赖注入 /// </summary> private void CommonInjectTest() { Log.L("****************************************"); Log.L("--------------常规依赖注入--------------"); Log.L("****************************************"); //第一种注入实例的方法 container.SubscribeInstance <ICommonInjectObject>(new CommonObject()); //第一种从容器获取实例的方法 _commonObject = container.GetValue <ICommonInjectObject>(); Log.L("调用第一个注入实例的ToDo方法:"); _commonObject.ToDo(); Log.L(""); //第二种注入实例的方法 //如果对同一个目标类注入,将会被覆盖 container.SubscribeInstance(typeof(ICommonInjectObject), new CommonObject("这是使用带参构造函数构造的实例")); //第二种获取实例的方法 _commonObject = container.GetValue(typeof(ICommonInjectObject)) as ICommonInjectObject; Log.L("调用第二个注入实例的ToDo方法:"); _commonObject.ToDo(); //使用容器的Clear方法清除当前所有注入的实例 container.Clear(); Log.L(""); Log.L("容器已清空"); Log.L(""); }
/// <summary> /// 同类型多个实例的注入 /// </summary> private void MultiInjectTest() { //一个类型可以注入多个实例,通过name这个属性来区分 Log.L("****************************************"); Log.L("----------同类型多个实例的注入----------"); Log.L("****************************************"); container.SubscribeInstance <ICommonInjectObject>(new CommonObject("这是第一个实例"), "Instance1"); container.SubscribeInstance(typeof(ICommonInjectObject), new CommonObject("这是第二个实例"), "Instance2"); //从容器中获取实例需要指定name _commonObject = container.GetValue <ICommonInjectObject>("Instance1"); Log.L($"取出名为Instance1的实例,类型为{_commonObject.GetType()},调用ToDo方法:"); _commonObject.ToDo(); Log.L(""); _commonObject = container.GetValue(typeof(ICommonInjectObject), "Instance2") as ICommonInjectObject; Log.L($"取出名为Instance2的实例,类型为{_commonObject.GetType()},调用ToDo方法:"); _commonObject.ToDo(); Log.L(""); Log.L("使用容器中的GetValues方法获取ICommonInjectObject所有注入的实例,并调用ToDo方法:"); IEnumerable <ICommonInjectObject> allInstance = container.GetValues <ICommonInjectObject>(); //遍历调用取到的所有实例的方法 foreach (ICommonInjectObject instance in allInstance) { instance.ToDo(); } Log.L(""); Log.L("使用另一种重载的方法获取所有实例,并调用ToDo方法:"); IEnumerable <object> objectInstance = container.GetValues(typeof(ICommonInjectObject)); foreach (ICommonInjectObject instance in objectInstance) { instance.ToDo(); } //使用容器的Clear方法清除当前所有注入的实例 container.Clear(); Log.L(""); Log.L("容器已清空"); Log.L(""); }