从asp.core 2.2迁移到3.1。 Autofac.Core.DependencyResolutionException

问题描述 投票:0回答:1

我正在迁移,并且遇到异常。 Autofac可以从服务提供商的实例解析我的服务,但在请求时无法在我的控制器中获取它。

Exception: Castle.DynamicProxy.ProxyGenerationException:这是一个DynamicProxy2错误:代理的目标类型实现Castle.DynamicProxy.IProxyTargetAccessor是一个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 
}

我曾建议通过将Autofac.Extensions.DependencyInjection软件包从6.0.0降级为5.0.1,如建议的there来解决此问题,但没有帮助。

您可以在https://pastebin.com/YCAhLQv0中找到完整的Stacktrace。

所以问题是如何解决该异常并使我的拦截器正常工作?

c# asp.net-core autofac castle-dynamicproxy
1个回答
0
投票

通过将Autofac.Extras.DynamicProxy软件包版本从4.5.0升级到5.0.0修复。希望它可以帮助某人。

© www.soinside.com 2019 - 2024. All rights reserved.