Это очень похоже на это дело , но решение не работает для. net core 3.1.
Итак, у меня есть IAuthorizationFilter
:
public class AuthFilter : IAuthorizationFilter
{
private readonly IUserService userService;
public AuthFilter(IUserService userService)
{
this.userService = userService;
}
public void OnAuthorization(AuthorizationFilterContext context)
{
Console.WriteLine("Doing authZZZ: " + userService.DoSomething());
}
}
и простой сервис
public interface IUserService
{
string DoSomething();
}
class UserService : IUserService
{
public string DoSomething()
{
return "Something";
}
}
Регистрация фильтра и сервиса как:
services.Configure<MvcOptions>(options => options.Filters.Add<AuthFilter>());
...
container.Register<IUserService, UserService>(Lifestyle.Transient);
Все остальное, как в примере
И получено исключение при вызове действия:
InvalidOperationException: невозможно разрешить службу для типа 'TestSimpleInj.IUserService' при попытке активировать 'TestSimpleInj.AuthFilter'.
Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetService(IServiceProvider sp, Type type, Type requiredBy, bool isDefaultParameterRequired)
lambda_method(Closure , IServiceProvider , object[] )
Microsoft.AspNetCore.Mvc.TypeFilterAttribute.CreateInstance(IServiceProvider serviceProvider)
Microsoft.AspNetCore.Mvc.Filters.DefaultFilterProvider.ProvideFilter(FilterProviderContext context, FilterItem filterItem)
Microsoft.AspNetCore.Mvc.Filters.DefaultFilterProvider.OnProvidersExecuting(FilterProviderContext context)
Microsoft.AspNetCore.Mvc.Filters.FilterFactory.CreateUncachedFiltersCore(IFilterProvider[] filterProviders, ActionContext actionContext, List<FilterItem> filterItems)
Microsoft.AspNetCore.Mvc.Filters.FilterFactory.GetAllFilters(IFilterProvider[] filterProviders, ActionContext actionContext)
Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvokerCache.GetCachedResult(ControllerContext controllerContext)
Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvokerProvider.OnProvidersExecuting(ActionInvokerProviderContext context)
Microsoft.AspNetCore.Mvc.Infrastructure.ActionInvokerFactory.CreateInvoker(ActionContext actionContext)
Microsoft.AspNetCore.Mvc.Routing.ActionEndpointFactory+<>c__DisplayClass7_0.<CreateRequestDelegate>b__0(HttpContext context)
Microsoft.AspNetCore.Routing.EndpointMiddleware.Invoke(HttpContext httpContext)
Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)