using Microsoft.Extensions.DependencyInjection;
namespace Dpz.Core.Service.Mediator;
/// <summary>
/// 提供 Mediator 相关的依赖注入扩展。
/// </summary>
public static class MediatorExtensions
{
/// <summary>
/// 注册 Dpz 中介者及治理管道。
/// </summary>
/// <param name="services">服务集合。</param>
/// <returns>服务集合,便于链式调用。</returns>
public static IServiceCollection AddDpzMediator(this IServiceCollection services)
{
services.AddMediator(options =>
{
options.ServiceLifetime = ServiceLifetime.Scoped;
});
return services.AddDpzMediatorGovernance();
}
/// <summary>
/// 注册 Dpz 中介者治理管道(日志、耗时、异常包装)。
/// </summary>
/// <param name="services">服务集合。</param>
/// <returns>服务集合,便于链式调用。</returns>
public static IServiceCollection AddDpzMediatorGovernance(this IServiceCollection services)
{
services.AddScoped(
typeof(IPipelineBehavior<,>),
typeof(Common.Behaviors.MediatorLoggingBehavior<,>)
);
services.AddScoped(
typeof(IPipelineBehavior<,>),
typeof(Common.Behaviors.MediatorPerformanceBehavior<,>)
);
services.AddScoped(
typeof(IPipelineBehavior<,>),
typeof(Common.Behaviors.MediatorExceptionWrappingBehavior<,>)
);
return services;
}
/// <summary>
/// 获取img标签图片地址
/// </summary>
/// <param name="elements"></param>
/// <returns></returns>
public static List<string> GetElementsImageUrls(this IHtmlCollection<IElement> elements)
{
return elements
.Select(x => x.Attributes["src"])
.Where(x => x != null)
.Select(x => x!.Value)
.Where(x => !string.IsNullOrEmpty(x))
.ToList();
}
}
⚠⚠ 以下内容为AI分析的结果,请根据实际情况进行判断。
这个代码文件定义了一个静态扩展类 MediatorExtensions,主要用于简化中介者模式(Mediator Pattern)相关的依赖注入配置。让我逐一解释每个方法的功能:
类概述
MediatorExtensions 是一个静态扩展类,为 IServiceCollection 提供扩展方法,用于注册中介者服务和相关的管道行为。
方法详解
1. AddDpzMediator 方法
public static IServiceCollection AddDpzMediator(this IServiceCollection services)
功能:
- 这是主要的注册方法,用于一次性配置完整的 Dpz 中介者服务
- 首先调用
AddMediator注册基础的中介者服务,并设置服务生命周期为Scoped - 然后调用
AddDpzMediatorGovernance注册治理管道 - 返回服务集合以支持链式调用
2. AddDpzMediatorGovernance 方法
public static IServiceCollection AddDpzMediatorGovernance(this IServiceCollection services)
功能:
- 专门用于注册中介者的治理管道(管道行为)
- 注册了三个核心的管道行为,都是以
Scoped生命周期注册:MediatorLoggingBehavior:日志记录行为MediatorPerformanceBehavior:性能监控行为MediatorExceptionWrappingBehavior:异常包装行为
这些管道行为实现了 IPipelineBehavior<,> 接口,会在中介者处理请求时按照注册顺序依次执行,形成一个处理管道。
3. GetElementsImageUrls 方法
public static List<string> GetElementsImageUrls(this IHtmlCollection<IElement> elements)
功能:
- 这个方法似乎与中介者模式无关,用于从HTML元素集合中提取图片URL
- 遍历HTML元素集合,获取每个元素的
src属性 - 过滤掉空值,返回有效的图片URL列表
设计模式与架构
这个扩展类体现了以下设计原则:
- 扩展方法模式:为现有类型添加功能而不修改原类型
- 流畅接口:通过返回
IServiceCollection支持链式调用 - 管道模式:通过多个 Behavior 形成处理管道
- 关注点分离:将日志、性能监控、异常处理等横切关注点分离到独立的行为中
使用示例
// 在 Startup.cs 或 Program.cs 中使用
services.AddDpzMediator();
// 或者只注册治理管道(如果已有其他中介者配置)
services.AddDpzMediatorGovernance();
注意:GetElementsImageUrls 方法放在这个文件中可能不太合适,因为它与中介者功能无关,建议将其移动到更合适的扩展类中。
评论加载中...