Я выполняю миграцию и обнаружил исключение. Autofa c может разрешить мой сервис из экземпляра поставщика услуг, но не может получить его в моем контроллере во время запроса.
Исключение: 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
}
Я попытался исправить это путем понижения версии пакета Autofa c .Extensions.DependencyInjection с 6.0.0 до 5.0.1, как было предложено там но это не помогло.
Вы можете найти полную Stacktrace там https://pastebin.com/YCAhLQv0.
Так что вопрос в том, как я могу исправить исключение и мой перехватчик работает?