C# 从asp.core 2.2迁移到3.1。Autofac.Core.dependencResolutionException
我正在进行迁移,遇到了一个异常。Autofac可以从服务提供商的实例解析我的服务,但在请求时无法在我的控制器中获取它 异常:Castle.DynamicProxy.ProxyGe GenerationException:这是DynamicProxy 2错误:代理的目标类型实现Castle.DynamicProxy.IP roxyTargetAccessor是一个DynamicProxy基础设施接口,您永远不应该自己实现它 F您正在尝试代理现有代理吗 我的自动注册模块如下所示:C# 从asp.core 2.2迁移到3.1。Autofac.Core.dependencResolutionException,c#,asp.net-core,autofac,castle-dynamicproxy,C#,Asp.net Core,Autofac,Castle Dynamicproxy,我正在进行迁移,遇到了一个异常。Autofac可以从服务提供商的实例解析我的服务,但在请求时无法在我的控制器中获取它 异常:Castle.DynamicProxy.ProxyGe GenerationException:这是DynamicProxy 2错误:代理的目标类型实现Castle.DynamicProxy.IP roxyTargetAccessor是一个DynamicProxy基础设施接口,您永远不应该自己实现它 F您正在尝试代理现有代理吗 我的自动注册模块如下所示: public cl
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);
}
}
我的服务看起来像
[Intercept(typeof(LogInterceptor))]
public class CategoriesService : ICategoriesService
{
// some code here
}
我试图通过将Autofac.Extensions.DependencyInjection包从6.0.0降级到5.0.1来修复它,但没有任何帮助
你可以在那里找到完整的Stacktrace
那么问题是如何修复异常并保持拦截器工作?通过将Autofac.Extras.DynamicProxy软件包版本从4.5.0提高到5.0.0来修复。
希望它能帮助别人。您应该在这里列出您的依赖列表。听起来你可能有点不对劲,但这里没有足够的信息。
[Intercept(typeof(LogInterceptor))]
public class CategoriesService : ICategoriesService
{
// some code here
}