using System; using System.Collections.Generic; using System.Text; namespace Serein.Library.Api { /// /// 单例模式IOC容器,内部维护了一个实例字典,默认使用类型的FullName作为Key, /// 如果以“接口-实现类”的方式注册,那么将使用接口类型的FullName作为Key。 /// 当某个类型注册绑定成功后,将不会因为其它地方尝试注册相同类型的行为导致类型被重新创建。 /// public interface ISereinIOC { /// /// 慎用,重置IOC容器,除非再次注册绑定,否则将导致不能创建注入依赖类的临时对象。 /// /// ISereinIOC Reset(); /// /// 通过指定类型的方式注册实例,该类型的实例由你提供 /// /// 实例类型 /// ISereinIOC Register(Type type); /// /// 通过指定类型的方式注册实例,该类型将由IOC容器自动创建 /// /// 实例类型 /// 获取实例的回调函数 /// ISereinIOC Register(Type type, Func getInstance); /// /// 通过泛型的方式注册类型,该类型将由IOC容器自动创建 /// /// 实例类型 /// ISereinIOC Register(); /// /// 通过泛型的方式注册类型,该类型的实例由你提供 /// /// 实例类型 /// 获取实例的回调函数 /// ISereinIOC Register(Func getInstance); /// /// 注册接口的实例,该接口类型的实现类实例由你提供 /// /// 接口类型 /// 实例类型 /// 获取实例的回调函数 /// ISereinIOC Register(Func getInstance) where TImplementation : TService; /// /// 注册接口的实现类 /// /// 接口类型 /// 实例类型 /// ISereinIOC Register() where TImplementation : TService; /// /// 获取类型的实例。如果需要获取的类型以“接口-实现类”的方式注册,请使用接口的类型。 /// object Get(Type type); /// /// 获取类型的实例。如果需要获取的类型以“接口-实现类”的方式注册,请使用接口的类型。 /// T Get(); /// /// 给定一个类型,由IOC容器负责创建实例,如果存在多个构造函数,将由参数最多的构造函数开始尝试创建。 /// /// object CreateObject(Type type); /// /// 给定一个类型,由IOC容器负责创建实例,如果存在多个构造函数,将由参数最多的构造函数开始尝试创建。 /// /// T CreateObject(); /// /// 给定一个实例,尽可能地在该实例中具有[AutoInjection]特性的属性上,设置为IOC容器中已有的对应类型的对象。 /// /// 对应的类型 /// 传入的实例 /// T InjectDependenciesProperty(T instance); /// /// 搜寻已注册的类型生成依赖关系,依次实例化并注入依赖项,缓存在由IOC容器维护的Map中,直到手动调用Reset()方法。 /// /// ISereinIOC Build(); /// /// 从容器中获取某个类型的实例进行运行 /// /// /// /// ISereinIOC Run(Action action); /// /// 从容器中获取数个类型的实例进行运行 /// /// /// /// /// ISereinIOC Run(Action action); /// /// 从容器中获取数个类型的实例进行运行 /// /// /// /// /// /// ISereinIOC Run(Action action); /// /// 从容器中获取数个类型的实例进行运行 /// /// /// /// /// /// /// ISereinIOC Run(Action action); } }