//------------------------------------------------------------------------------
// 此代码版权(除特别声明或在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; }
}
}