You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何封装OpenTelemetry抽象类?内部库API封装难题求助

封装OpenTelemetry抽象类以隐藏公共API的问题

我正在使用OpenTelemetry,想要通过内部库封装其逻辑,避免业务项目直接使用OpenTelemetry(OT)公共API,防止相关逻辑分散,确保所有操作集中在一处。我通过以下配置限制公共API的暴露:

<PackageReference Include="OpenTelemetry" Version="1.5.1" PrivateAssets="All" />

常规继承场景下一切正常——我可以继承基础逻辑,甚至通过标记接口在内部层对其进行操作,例如:

public class OtlpOptions : OtlpExporterOptions {
}

我希望隐藏OT API,通过扩展方法提供简洁的通用访问方式,示例调用如下:

var builder = WebApplication.CreateBuilder(args);            
builder.Services.AddOpenTelemetryTracing().WithOtelExporter().WithConsoleExporter();
builder.Services.AddOpenTelemetryMetrics().WithConsoleExporter();

但问题在于OpenTelemetry存在大量抽象类,比如TracerProviderBuilder,我无法在不引用该抽象类的情况下为其创建标记接口,这导致封装失效,业务项目必须引入特定的OT引用才能调用。我想了解如何封装这类抽象类?

更新:
发现一个奇怪的现象:调用扩展方法tpBuilder.WithOtelExporter()时需要业务项目引入OT引用,但调用静态方法MyOpenTelemetryExtension.WithOtelExporter(tpBuilder)则不需要。

内容的提问来源于stack exchange,提问作者AleksP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 13:29:31