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

ASP.NET Core ConfigureServices中不使用BuildServiceProvider获取服务实例的方法

解决方案

你可以使用ASP.NET Core自带的Options配置体系的带依赖注入重载,完全避免手动构建ServiceProvider,也不需要手动实例化CustomTicketStore:

步骤1:保留原有的服务注册代码

// 注册自定义TicketStore
services.AddSingleton<ITicketStore, CustomTicketStore>();

步骤2:修改Cookie认证配置逻辑

不要在AddCookie的委托里直接获取服务,改为通过OptionsBuilder的泛型Configure方法注入已注册的ITicketStore:

services.AddAuthentication("Cookies")
    .AddCookie("Cookies");

// 注入ITicketStore配置Cookie选项
services.AddOptions<CookieAuthenticationOptions>("Cookies")
    .Configure<ITicketStore>((options, ticketStore) =>
    {
        options.SessionStore = ticketStore;
    });

原理解释

这种写法的优势在于:

  • Configure方法泛型参数声明的依赖,会在容器完全构建完成后、第一次使用CookieAuthenticationOptions时自动从容器中解析,不会生成额外的容器副本,完全消除官方警告
  • 不需要手动处理CustomTicketStore的构造函数依赖,所有依赖(比如你示例中的AuthRepository、OracleConnection)只要提前注册到服务容器中,就会自动注入,代码更简洁易维护

注意:需要确保CustomTicketStore构造函数中所有依赖项都已提前注册到服务容器中,AddOptions的参数需要和AddCookie的认证方案名保持一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:48:02