using System; using System.Collections.Generic; using System.Text; namespace Serein.Library.Api { /// /// 单例模式IOC容器,内部维护了一个实例字典,默认使用类型的FullName作为Key,如果以“接口-实现类”的方式注册,那么将使用接口类型的FullName作为Key。 /// 当某个类型注册绑定成功后,将不会因为其它地方尝试注册相同类型的行为导致类型被重新创建。 /// public interface ISereinIOC { /// /// 慎用,重置IOC容器,除非再次注册绑定,否则将导致不能创建注入依赖类的临时对象。 /// /// ISereinIOC Reset(); /// /// 注册实例,如果确定了params,那么将使用params入参构建实例对象。 /// ISereinIOC Register(Type type, params object[] parameters); /// /// 通过泛型的方式注册实例,如果确定了params,那么将使用params入参构建实例对象。 /// /// /// /// ISereinIOC Register(params object[] parameters); /// /// 注册接口的实例 /// /// 接口类型 /// 实例类型 /// /// ISereinIOC Register(params object[] parameters) where TImplementation : TService; /// /// 获取类型的实例。如果需要获取的类型以“接口-实现类”的方式注册,请使用接口的类型。 /// object Get(Type type); /// /// 获取类型的实例。如果需要获取的类型以“接口-实现类”的方式注册,请使用接口的类型。 /// T Get(); /// /// 获取指定名称的实例。 /// 正常情况下应该使用 Get(Type type) / T Get<T>() 进行获取,但如果需要的实例是以CustomRegisterInstance()进行的登记,则需要通过这种方法进行获取。 /// /// /// 登记实例时使用的Key /// T Get(string key); /// /// 指定一个Key登记一个实例。如果实例中需要注入的依赖项,需要将needInjectProperty设置为true。 /// /// 注入名称 /// 实例对象 /// 是否需要注入依赖项 /// 是否注册成功 bool CustomRegisterInstance(string key, object instance, bool needInjectProperty = true); /// /// 创建实例并注入依赖项,不会注册到IOC容器中。 /// 使用场景:例如 View 的构造函数中需要创建 ViewModel,而 ViewModel 存在注册过的依赖项,可以通过该接口进行创建 /// /// object Instantiate(Type type); /// /// 创建实例并注入依赖项,不会注册到IOC容器中。 /// 使用场景:例如 View 的构造函数中需要创建 ViewModel,而 ViewModel 存在注册过的依赖项,可以通过该接口进行创建 /// /// T Instantiate(); /// /// 通过已注册的类型,生成依赖关系,然后依次实例化并注入依赖项,最后登记到容器中。 /// /// ISereinIOC Build(); /// /// 从容器中获取某个类型的实例进行运行 /// /// /// /// ISereinIOC Run(Action action); ISereinIOC Run(Action action); ISereinIOC Run(Action action); ISereinIOC Run(Action action); ISereinIOC Run(Action action); ISereinIOC Run(Action action); ISereinIOC Run(Action action); ISereinIOC Run(Action action); } }