Obter injetado objeto no filtro ASP.NET vNext

votos
6

Eu estou tentando criar minha atributo autorizar costume, mas em vNext asp.net usando a estrutura de injeção de dependência padrão eu não como para obter o objeto injetado. Eu preciso para obter o objeto injetado no ctor padrão.

   public  class CustomAttribute
{

   private IDb _db;

   public CustomAttribute()
   {
       _db = null; // get injected object
   }

   public CustomAttribute(IDb db)
   {
       _db = db;
   }

   // apply all authentication logic
}
Publicado 14/11/2014 em 23:04
fonte usuário
Em outras línguas...                            


1 respostas

votos
9

Você pode usar o ServiceFilterAttribute para esta finalidade. O atributo de filtro de serviço permite que o sistema DI cuidar de instanciar e manter a vida útil do filtro CustomAuthorizeFiltere seus todos os serviços necessários.

Exemplo:

// register with DI
services.AddScoped<ApplicationDbContext>();
services.AddTransient<CustomAuthorizeFilter>();

//------------------

public class CustomAuthorizeFilter : IAsyncAuthorizationFilter
{
    private readonly ApplicationDbContext _db;

    public CustomAuthorizeFilter(ApplicationDbContext db)
    {
        _db = db;
    }

    public Task OnAuthorizationAsync(AuthorizationContext context)
    {
        //do something here    
    }
}

//------------------

[ServiceFilter(typeof(CustomAuthorizeFilter))]
public class AdminController : Controller
{
    // do something here
}
Respondeu 15/11/2014 em 01:52
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more