Я создаю фильтр IAuthorizationFilter
и мне нужно использовать DepencyInjection в этом атрибуте.
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)]
public class AllowAccessAttribute : Attribute, IAuthorizationFilter
{
private readonly IDomainUnitOfWork unitofwork;
private readonly HttpContext httpContext;
public AllowAccessAttribute(IDomainUnitOfWork unitofwork,HttpContext httpContext)
{
this.unitofwork = unitofwork;
this.httpContext = httpContext;
}
public void OnAuthorization(AuthorizationFilterContext context)
{
string controller = context.RouteData.Values["controller"].ToString();
string action = context.RouteData.Values["action"].ToString();
var userId = httpContext.User.Identity.GetUserId<long>();
var access = string.Format("{0}:{1}", controller, action);
if (unitofwork.UserRepository.AccessLevelRepository.ValidateAccess(userId, access))
context.Result = new StatusCodeResult(403);
}
}
Когда мне нужно использовать этот атрибут, он показывает мне ошибку
[HttpGet]
[AllowAccess]
public async Task<ApiReturn> ChangeUserActiveStatus(long id)
{
var result = await dispatchers.SendAsync(new UserActiveStateCommand { id = id });
if (result.Success)
{
return Ok();
}
return BadRequest(result.Exception);
}
И покажите эту ошибку:
Не указан аргумент, соответствующий необходимому формальному параметру 'unitofwork' в 'AllowAccessAttribute.AllowAccessAttribute (IDomainUnitOfWork, HttpContext)
В чем проблема? как я могу решить эту проблему?