从 asp.core 2.2 迁移到 3.1。 Autofac.Core.DependencyResolutionException
Posted
技术标签:
【中文标题】从 asp.core 2.2 迁移到 3.1。 Autofac.Core.DependencyResolutionException【英文标题】:migration from asp.core 2.2 to 3.1. Autofac.Core.DependencyResolutionException 【发布时间】:2020-06-18 06:48:56 【问题描述】:我正在进行迁移并遇到异常。 Autofac 可以从服务提供者的实例解析我的服务,但在请求时无法在我的控制器中获取它。
例外: Castle.DynamicProxy.ProxyGe nerationException:这是 DynamicProxy2 错误:代理的目标类型实现 Castle.DynamicProxy.IP roxyTargetAccessor 这是一个 DynamicProxy 基础设施接口,你永远不应该自己实现它 F。您是否尝试代理现有代理?
我的 AutoregistrableModule 看起来像这样:
public class AutoregisterableModule : Autofac.Module
private readonly string _nameFilter;
/// <summary>
/// Default ctor
/// </summary>
/// <param name="nameFilter">Load will only search assemblies with names that contains filter</param>
public AutoregisterableModule(string nameFilter)
_nameFilter = nameFilter;
/// <summary>
/// Register's dependencies
/// </summary>
protected override void Load(ContainerBuilder builder)
var assemblies = new List<Assembly>();
var dependencies = DependencyContext.Default.RuntimeLibraries.Where(x => x.Name.Contains(_nameFilter));
foreach (var library in dependencies)
var assembly = Assembly.Load(new AssemblyName(library.Name));
assemblies.Add(assembly);
builder.Register(c => new LogInterceptor()).InstancePerLifetimeScope();
var isProd = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") == "Production";
var containerBuilder = builder.RegisterAssemblyTypes(assemblies.ToArray())
.Where(TypesToRegisterFilter)
.PreserveExistingDefaults()
.AsImplementedInterfaces();
if (!isProd)
containerBuilder.EnableInterfaceInterceptors();
base.Load(builder);
private static bool TypesToRegisterFilter(Type type)
return !type.IsSubclassOf(typeof(SwaggerConfigureOptions)) && !typeof(BackgroundService).IsAssignableFrom(type);
如果我删除该行一切正常(除了我的 LoggerInterceptor :D)
containerBuilder.EnableInterfaceInterceptors();
我的服务看起来像
[Intercept(typeof(LogInterceptor))]
public class CategoriesService : ICategoriesService
// some code here
我尝试按照there 的建议将 Autofac.Extensions.DependencyInjection 包从 6.0.0 降级到 5.0.1 来修复它,但没有帮助。
你可以在那里找到完整的 Stacktrace https://pastebin.com/YCAhLQv0。
所以问题是如何修复异常并保持拦截器正常工作?
【问题讨论】:
您应该在此处包含您的依赖项列表。听起来您可能有一些不正常的地方,但这里没有足够的信息。 【参考方案1】:通过将 Autofac.Extras.DynamicProxy 软件包版本从 4.5.0 提高到 5.0.0 来修复。 希望它可以帮助某人。
【讨论】:
以上是关于从 asp.core 2.2 迁移到 3.1。 Autofac.Core.DependencyResolutionException的主要内容,如果未能解决你的问题,请参考以下文章
从 2.2 迁移到 3.1 的 ASP.Net Core 解决方案在发布时不会运行
从 .NET Core 2.2 迁移到 3.1 后,EF Core 随机抓取 API 请求上的用户表
Linq 查询在 ASP.NET-Core 3.0 及更高版本中对数字等字符串进行排序
如何使用 dotnet cli 命令以 VB.NET 语言创建 ASP.NET Core 项目?