//------------------------------------------------------------------------------ // 此代码版权(除特别声明或在XREF结尾的命名空间的代码)归作者本人若汝棋茗所有 // 源代码使用协议遵循本仓库的开源协议及附加协议,若本仓库没有设置,则按MIT开源协议授权 // CSDN博客:https://blog.csdn.net/qq_40374647 // 哔哩哔哩视频:https://space.bilibili.com/94253567 // Gitee源代码仓库:https://gitee.com/RRQM_Home // Github源代码仓库:https://github.com/RRQM // API首页:https://www.yuque.com/rrqm/touchsocket/index // 交流QQ群:234762506 // 感谢您的下载和使用 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ using System; namespace TouchSocket.Core { /// /// 指定依赖类型。 /// [AttributeUsage(AttributeTargets.Class)] public class DependencyTypeAttribute : Attribute { /// /// 初始化一个依赖类型。当确定某个类型仅以某种特定方式注入时,可以过滤不必要的注入操作,以提高效率。 /// /// 可以叠加位域 public DependencyTypeAttribute(DependencyType type) { Type = type; } /// /// 支持类型。 /// public DependencyType Type { get; } } /// /// 依赖注入类型。 /// public enum DependencyType { /// /// 构造函数 /// Constructor = 1, /// /// 属性 /// Property = 2, /// /// 方法 /// Method = 4 } /// /// 指定依赖类型,构造函数,可用于构造函数,属性,方法。 /// [AttributeUsage(AttributeTargets.Class | AttributeTargets.Constructor | AttributeTargets.Property | AttributeTargets.Method)] public class DependencyInjectAttribute : Attribute { /// /// 初始化一个依赖注入对象。并且指定构造参数。 /// 当创建时也指定参数时,会覆盖该设定。 /// /// public DependencyInjectAttribute(params object[] ps) { Ps = ps; } /// /// 构造函数 /// /// public DependencyInjectAttribute(bool resolveNullIfNoRegistered) { ResolveNullIfNoRegistered = resolveNullIfNoRegistered; } /// /// 构造参数 /// public object[] Ps { get; } /// /// 如果没有注册则返回为空 /// public bool ResolveNullIfNoRegistered { get; set; } } /// /// 参数,属性指定性注入。 /// [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Property)] public class DependencyParamterInjectAttribute : DependencyInjectAttribute { /// /// 参数,属性指定性注入。 /// /// /// public DependencyParamterInjectAttribute(string key, params object[] ps) : base(ps) { Key = key; } /// /// 类型,参数,属性指定性注入。 /// /// /// /// public DependencyParamterInjectAttribute(Type type, string key, params object[] ps) : base(ps) { Key = key; Type = type; } /// /// 类型,参数,属性指定性注入。 /// /// /// public DependencyParamterInjectAttribute(Type type, params object[] ps) : base(ps) { Key = string.Empty; Type = type; } /// /// 注入类型 /// public Type Type { get; } /// /// 构造函数 /// /// public DependencyParamterInjectAttribute(bool resolveNullIfNoRegistered) { ResolveNullIfNoRegistered = resolveNullIfNoRegistered; } /// /// 指定键。 /// public string Key { get; } } }