C# 中的属性是一项强大的功能,允许开发人员将元数据添加到其代码中。此元数据可用于控制各种组件的行为,从序列化到验证,而不会因重复的逻辑而使代码库变得混乱。虽然 .NET 提供了丰富的内置属性,但有时你需要更符合你的特定需求的属性。这就是自定义属性发挥作用的地方。
在本文中,我们将探讨如何在 ASP.NET Core 应用程序中用 C# 创建和使用自定义属性,并展示它们的实际用例和优势。
C# 中的属性是什么?
特性是可以放置在类、方法、属性和其他代码元素上的特殊声明性标记。它们提供有关这些元素行为的其他信息。属性派生自基类。System.Attribute
例如,该属性可用于标记不应再使用的方法:[Obsolete]
[Obsolete("This method is deprecated, use NewMethod instead.")]
public void OldMethod()
{
// ...
}
为什么要创建自定义属性?
虽然内置属性涵盖许多场景,但自定义属性允许您封装适用于应用程序的特定逻辑。它们可以通过分离横切关注点(如日志记录、验证或授权)来帮助您创建更简洁、更易于维护的代码。
创建自定义属性
让我们创建一个自定义属性,该属性可用于标记需要日志记录的方法。此属性将允许我们集中日志记录逻辑,而不是将其分散到各种方法中。
定义自定义属性
要创建自定义属性,请定义一个继承自 的类。您可以向属性类添加属性或构造函数以接受参数。System.Attribute
[AttributeUsage(AttributeTargets.Method, Inherited = false, AllowMultiple = false)]
public sealed class LogMethodExecutionAttribute : Attribute
{
public string LogMessage { get; }
public LogMethodExecutionAttribute(string logMessage)
{
LogMessage = logMessage;
}
}
该属性用于定义如何使用您的自定义属性。在此示例中,指定该属性只能应用于方法。该属性设置为 时,将属性限制为每个方法仅使用一次。[AttributeUsage]AttributeTargets.MethodAllowMultiplefalse
2. 应用 Custom 属性
定义属性后,您可以将其应用于 ASP.NET Core 应用程序中的方法。
public class SampleController : ControllerBase
{
[LogMethodExecution("Executing Index method")]
public IActionResult Index()
{
// Method logic here
return Ok("Index executed");
}
}
3. 在 ASP.NET Core 中读取自定义属性
要使用 custom 属性,您需要考虑该方法并根据属性的属性执行任何关联的逻辑。这通常使用反射来完成。
以下示例说明了如何根据您的自定义属性实现自动记录方法执行:ActionFilter
public class LogMethodExecutionFilter : IActionFilter
{
public void OnActionExecuting(ActionExecutingContext context)
{
var method = context.ActionDescriptor.MethodInfo;
var logAttribute = method.GetCustomAttribute<LogMethodExecutionAttribute>();
if (logAttribute != null)
{
// Your logging logic here
Console.WriteLine($"Log: {logAttribute.LogMessage}");
}
}
public void OnActionExecuted(ActionExecutedContext context)
{
// Post-action logic
}
}
然后,您可以全局注册此过滤器或将其应用于特定控制器或操作:
services.AddControllers(options =>
{
options.Filters.Add<LogMethodExecutionFilter>();
});
实际用例
自定义属性可用于多种方案,包括:
日志记录:如前所述,您可以创建自定义属性以在粒度级别处理日志记录。
验证:自定义属性可用于验证方法参数或属性。
授权:您可以创建强制实施特定安全规则的自定义授权属性。
缓存:使用自定义缓存属性标记方法以自动缓存响应。
C# 中的自定义属性是向代码添加可重用元数据和行为的有效方法。它们通过抽象横切关注点来允许更清晰、更易维护和灵活的代码。在 ASP.NET Core 应用程序中,您可以使用自定义属性来增强日志记录、验证、授权等。
如果你喜欢我的文章,请给我一个赞!谢谢