当前位置: 首页 > news >正文

中国中小企业信息网做优化关键词

中国中小企业信息网,做优化关键词,怎么用本机ip做网站,杭州网站建设工作室使用 Rougamo.Fody 实现 AOP 日志,并定义一个 ILog 接口供 SDK 使用,具体日志实现由调用方提供。这是一个非常标准的解耦设计模式,适用于中间件、SDK、插件等场景。 ✅ 整体架构目标 组件 说明 ILog 定义日志接口,供内部使用 Nu…

使用 Rougamo.Fody 实现 AOP 日志,并定义一个 ILog 接口供 SDK 使用,具体日志实现由调用方提供。这是一个非常标准的解耦设计模式,适用于中间件、SDK、插件等场景。


✅ 整体架构目标

组件

说明

ILog

定义日志接口,供内部使用

NullLog

默认空实现,避免未注入时抛异常

LogAttribute

基于 Rougamo.Fody 的切面类,用于方法拦截并记录日志

MyService

示例 类,展示如何在业务逻辑中使用日志

调用方

提供具体的日志实现(如 Serilog、NLog 等)


📦 第一步:安装依赖包

bashdotnet add package Rougamo.Fody

安装后会自动创建 FodyWeavers.xml 文件,内容为 <Rougamo />,确保存在。


🧩 第二步:定义 ILog 和默认实现

1. 定义接口

csharppublic interface ILog
{void Debug(string message, params object[] args);void Info(string message, params object[] args);void Warn(string message, params object[] args);void Error(Exception exception, string message, params object[] args);
}

2. 默认无输出实现(Null Object Pattern)

csharpinternal class NullLog : ILog
{public void Debug(string message, params object[] args) { }public void Info(string message, params object[] args) { }public void Warn(string message, params object[] args) { }public void Error(Exception exception, string message, params object[] args) { }
}

🛠️ 第三步:创建基于 Rougamo.Fody 的日志切面

csharpusing Rougamo;
using System;
using System.Reflection;[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)]
public class LogAttribute : MoAttribute
{private static ILog _log = new NullLog();public static void SetLogger(ILog logger){_log = logger ?? new NullLog();}public override void OnEntry(MethodBase method, object?[]? args){_log.Debug("Entering {DeclaringType}.{MethodName}({Parameters})",method.DeclaringType?.Name,method.Name,string.Join(", ", args ?? Array.Empty<object>()));}public override void OnExit(MethodBase method, object?[]? args, object? result){_log.Debug("Exiting {DeclaringType}.{MethodName}, 返回值: {Result}",method.DeclaringType?.Name,method.Name,result);}public override void OnException(MethodBase method, object?[]? args, Exception exception){_log.Error(exception, "异常 {DeclaringType}.{MethodName}: {Message}",method.DeclaringType?.Name,method.Name,exception.Message);}
}

📌 第四步:在 库中使用 [Log] 切面

示例  类:

csharp[Log]
public class MyService
{public int Divide(int a, int b){return a / b;}public void DoSomething(){Console.WriteLine("执行业务逻辑");}
}

🧪 第五步:调用方注入日志实现(例如使用 Serilog)

1. 安装 Serilog 包(可选)

bashdotnet add package Serilog
dotnet add package Serilog.Sinks.Console

2. 实现适配器

csharpusing Serilog;public class SerilogAdapter : ILog
{private readonly ILogger _logger;public SerilogAdapter(ILogger logger) => _logger = logger;public void Debug(string message, params object[] args) =>_logger.Debug(message, args);public void Info(string message, params object[] args) =>_logger.Information(message, args);public void Warn(string message, params object[] args) =>_logger.Warning(message, args);public void Error(Exception exception, string message, params object[] args) =>_logger.Error(exception, message, args);
}

3. 初始化日志并设置给切面

csharpvar serilogLogger = new LoggerConfiguration().WriteTo.Console().CreateLogger();// 注入日志实现到切面
LogAttribute.SetLogger(new SerilogAdapter(serilogLogger));// 测试调用
var service = new MyService();
service.Divide(10, 0); // 触发异常,日志应被记录

📌 总结

功能

实现方式

方法拦截

Rougamo.Fody + LogAttribute

日志抽象接口

ILog

默认无日志实现

NullLog

具体日志实现

调用方可注入(如 SerilogAdapter)

支持类/方法标注

✅ 支持


注意

最后如果你准备使用肉夹馍,并且你准备使用肉夹馍开发一个供他人使用的NuGet组件,那么你需要把项目文件(.csproj)中Rougamo.Fody的引用改成下面这样,不然你发布的NuGet其他人引用后将需要额外引用Fody,否则将无法进行代码织入

<PackageReference Include="Rougamo.Fody" Version="1.0.1" IncludeAssets="all" PrivateAssets="contentfiles;analyzers" /
http://www.cadmedia.cn/news/5232.html

相关文章:

  • 网络广告营销论文西安seo外包服务
  • 互联网相关行业有哪些seo外链优化方法
  • sf网站怎么建设百度高级搜索怎么用
  • 湛江做网站需要什么重庆森林台词
  • 公司网站建设 公司简介怎么写长沙seo培训
  • 先做网站先备案seo零基础视频教程
  • 成品网站建设流程图镇江市网站
  • 不用登录的小游戏网站公关团队
  • 西安网站挂标关键词优化方法有什么步骤
  • 最新网站制作公司哪个好万网注册域名查询
  • 网站建设方案批发百度快速排名
  • 免费网站安全河南seo快速排名
  • 免费ai写作网站免费友情链接网页
  • 网站设计方案策划简述seo的优化流程
  • 宁波公司网站建设定制服务东莞网站建设哪家公司好
  • 个人网站源码htmlseo快速排名的方法
  • 新疆网络电视台优化网站搜索
  • 直销系统网站开发营销策略国内外文献综述
  • 客户信息管理软件seo常用分析的专业工具
  • 制服定做站长工具seo综合查询引流
  • 论述政府网站的建设趋势产品的推广及宣传思路
  • 确保网站建设又在前列建立网站的基本流程
  • wordpress图片中文济南网站万词优化
  • 网站建设技术培训学校宁波seo搜索引擎优化公司
  • 大连网站建设怎么做青岛网络优化费用
  • 建设网站广州市天琥设计培训学校官网
  • 德州有名的网站建设公司怎样才能被百度秒收录
  • 广告设计制作图片长春seo关键词排名
  • 区块链网站开发体app开发店铺推广渠道有哪些
  • 连山区网站建设无锡网站建设seo