Я переношу свое приложение. Net Core 2.2 до версии 3.1.
У меня есть следующий фильтр действий:
public class MyFilterAttribute : ActionFilterAttribute
{
private readonly string _name;
private readonly int _num;
private readonly string _type;
public MyFilterAttribute(string name, int num, string type)
{
_name = name;
_num = num;
_type = type;
}
public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
...
await base.OnActionExecutionAsync(context, next);
}
}
Я зарегистрировал этот фильтр в файле Startup.cs вот так:
services.AddTransient<MyFilterAttribute>();
И я использую фильтр внутри своих контроллеров вот так:
public class MyController : Controller
{
[MyFilter("some-name", 5000, "some-type")]
public async Task MyAction()
{
...
}
}
Этот фильтр отлично работал в моем приложении. Net Core 2.2. Однако теперь, когда я пытаюсь перейти на версию 3.1, я получаю следующее исключение:
Возникло исключение: CLR / System.AggregateException В Microsoft возникло необработанное исключение типа «System.AggregateException». Extensions.DependencyInjection.dll: «Некоторые службы не могут быть построены». Обнаружены внутренние исключения. Дополнительные сведения см. В разделе $ исключение в окне переменных. Внутреннее исключение
System.InvalidOperationException: невозможно разрешить службу для типа «System.String» при попытке активировать «my_app.Filters.MyFilterAttribute». в Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateArgumentCallSites (Тип serviceType, Тип instanceType типа, CallSiteChain, параметры CallSiteChain, ParameterInfo [], Boolean throwIfCallSiteNotFound. реализацияType, CallSiteChain (CallSiteChain) в Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.TryCreateExact (дескриптор ServiceDescriptor, тип serviceType, слот службы CallSiteChain, ячейка Int32) Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngine.ValidateService (дескриптор ServiceDescriptor)
Я попытался добавить фильтр глобально, как это:
services.AddControllersWithViews(config =>
{
config.Filters.Add<MyFilterAttribute>();
})
Но у меня то же самое ошибка.
Что-то изменилось. Net Core читает пользовательские фильтры. Net Core 3.1?
Я не вижу ничего уместного в документации по критическим изменениям миграции.