Можем ли мы иметь ActionFilter расширяет Enum <T>ASP Core2 - PullRequest
0 голосов
/ 01 января 2019

Я новичок в Asp Core, и я попытался реализовать IActionFilter, который расширяет тип Enum

public class IndexFilter<T> : IActionFilter
{
    public void OnActionExecuting(ActionExecutingContext context)
    {
          // for example T.GetType.GetProperties
    }
}

И в контроллере

public class CategoryController : Controller
{
    [Route("")]
    [HttpGet]
    [ServiceFilter( typeof( IndexFilter<Category> ))]
    public async Task<IActionResult> Index()
    { 
          //  Code
    }
    ....
}

Я дал емувыстрелил, и я наткнулся на Исключение

An unhandled exception has occurred while executing the request.
System.InvalidOperationException: No service for type 'AuthWebApi.Filters.IndexFilter`1[AuthWebApi.Models.Entities.Category]' has been registered.
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)

Я попытался изменить Startup.cs на:

services.AddScoped<IndexFilter<CategoryParent>>();
services.AddScoped<IndexFilter<Object>>();
services.AddScoped<IndexFilter<>>();

и ничего не получалось, если я не установил IndexFilter в соответствие с контроллером:

services.AddScoped<IndexFilter<Category>>();

Что делает класс Enumerable действует как обычный класс.

1 Ответ

0 голосов
/ 01 января 2019

Вы можете зарегистрировать IndexFilter<T> с общим типом, как показано ниже:

services.AddScoped(typeof(IndexFilter<>));

Затем он сможет разрешить услугу:

[ServiceFilter(typeof(IndexFilter<Category>))]
public async Task<IActionResult> Category()
{
    return Ok();
}
[ServiceFilter(typeof(IndexFilter<CategoryParent>))]
public async Task<IActionResult> CategoryParent()
{
    return Ok();
}
...