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

.NET Core使用C# SDK实例化DocuSign ApiClient的优化方式咨询

.NET 6 集成DocuSign SDK时ApiClient单例注入方案

结论:完全可以实现一次实例化全局复用,不需要每次调用SDK方法都重新初始化ApiClient

不需要自定义中间件来做实例创建,直接利用.NET 6内置的依赖注入容器注册单例服务,就能保证整个应用生命周期内只执行一次ApiClient实例化,所有业务类都可以注入复用,这也是生产环境的常用实践。

具体实现步骤

  • 第一步:在Program.cs中注册单例ApiClient
var builder = WebApplication.CreateBuilder(args);
// 从配置中读取DocuSign服务基地址
var docuSignBasePath = builder.Configuration.GetValue<string>("DocuSign:BasePath");
// 注册单例ApiClient,整个应用只会执行一次new操作
builder.Services.AddSingleton(new ApiClient(docuSignBasePath));

// 注册你的业务服务
builder.Services.AddScoped<IDocuSignService, DocuSignService>();
  • 第二步:在业务类中通过构造函数注入使用
public class DocuSignService : IDocuSignService
{
    private readonly ApiClient _docuSignClient;

    // 构造函数直接注入DI容器中的单例实例
    public DocuSignService(ApiClient docuSignClient)
    {
        _docuSignClient = docuSignClient;
    }

    public async Task<EnvelopeSummary> SendEnvelopeAsync(SendEnvelopeRequest request)
    {
        // 每次调用前单独配置当前请求的身份令牌,不要在初始化时固定配置
        _docuSignClient.Configuration.DefaultHeader["Authorization"] = $"Bearer {request.AccessToken}";
        var envelopesApi = new EnvelopesApi(_docuSignClient);
        // 调用SDK方法执行业务逻辑
        return await envelopesApi.CreateEnvelopeAsync(request.AccountId, request.EnvelopeDefinition);
    }
}

注意事项

  • 禁止在单例ApiClient初始化时固定配置AccessToken、AccountId这类和用户/请求上下文绑定的参数,这类参数有效期短、和具体调用身份绑定,必须在每次接口调用前动态赋值,否则会出现身份串用、令牌过期导致调用失败的问题。
  • DocuSign官方提供的C# SDK中ApiClient本身做了线程安全适配,单例复用不会出现请求冲突问题,相比每次调用重新实例化,能减少重复初始化的内存和性能开销。
  • 如果需要同时对接DocuSign多个环境(比如演示环境、生产环境使用不同基地址),不要注册全局单例,可以通过命名服务的方式按不同基地址注册多个实例,按需注入使用。
  • 如果确实要通过中间件创建实例,需要将创建好的实例存入DI容器或者请求上下文可访问的全局位置,本质和直接DI注册单例逻辑一致,但实现更繁琐,不推荐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.13 16:15:54