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

Autofac键控服务调用ResolveKeyed解析时报找不到生命周期作用域错误如何解决

Autofac 解析报错问题解决方法

核心报错原因

你注册服务时使用了InstancePerRequest()生命周期配置,该配置仅适配带有HTTP请求上下文的Web应用,控制台应用不存在内置的请求生命周期作用域,因此解析时无法找到匹配的作用域触发报错。

具体解决步骤

  • 第一步:替换生命周期配置
    将所有服务注册代码中的InstancePerRequest()替换为适配控制台应用的生命周期策略:
    • 若需要每个自定义生命周期作用域内仅生成一个实例,替换为InstancePerLifetimeScope()
    • 若需要全局单例,替换为SingleInstance()
    • 若需要每次解析都生成新实例,替换为InstancePerDependency()

修改后的注册代码示例:

builder.RegisterType<ILTLoPublisher<ScheduleUpdateEvent>>()
           .AsImplementedInterfaces()
           .InstancePerLifetimeScope()
           .Keyed<IILTLoPublisher<ScheduleUpdateEvent>>(AuditType.Schedule);

builder.RegisterType<ILTLoPublisher<ScheduleUpdatePart>>()
           .AsImplementedInterfaces()
           .InstancePerLifetimeScope()
           .Keyed<IILTLoPublisher<ScheduleUpdatePart>>(AuditType.Part);

builder.RegisterType<ILTLoPublisher<ScheduleUpdateTest>>()
           .AsImplementedInterfaces()
           .InstancePerLifetimeScope()
           .Keyed<IILTLoPublisher<ScheduleUpdateTest>>(AuditType.Test);
  • 第二步:校验注册类型合法性
    确认RegisterType中传入的是具体实现类而非接口:若ILTLoPublisher<>本身是接口,此处会出现注册错误,需要替换为对应的实现类,示例如下:
// 假设实现类为ILTLoPublisherImpl<>
builder.RegisterType<ILTLoPublisherImpl<ScheduleUpdateEvent>>()
           .AsImplementedInterfaces()
           .InstancePerLifetimeScope()
           .Keyed<IILTLoPublisher<ScheduleUpdateEvent>>(AuditType.Schedule);
  • 第三步:验证解析逻辑
    修改完成后原有解析代码无需调整,通过BeginLifetimeScope()创建的自定义作用域可直接匹配InstancePerLifetimeScope()的生命周期配置,正常解析出目标服务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 23:54:05