asp.net MVC5 - Inyección de dependencia y AuthorizeAttribute
Busqué mucho tiempo una solución para mi problema. Tengo un AuthorizeAttribute personalizado que necesita una dependencia de un "Servicio" que tiene acceso a un DbContext. Lamentablemente, la Inyección de dependencias no funcionó en el AuthorizeAttribute personalizado y siempre fue nula.
Se me ocurrió una solución (para mí) aceptable. ¿Ahora quiero saber si mi solución puede causar un comportamiento imprevisto?
Global.asax.cs
CustomAuthorizeAttribute.AuthorizeServiceFactory = () => unityContainer.Resolve<AuthorizeService>();
CustomAuthorizeAttribute.cs
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
public static Func<AuthorizeService> AuthorizeServiceFactory { get; set; }
public Privilege Privilege { get; set; }
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
bool authorized = base.AuthorizeCore(httpContext);
if (!authorized)
{
return false;
}
return AuthorizeServiceFactory().AuthorizeCore(httpContext, Privilege);
}
}
AuthorizeService.cs
public class AuthorizeService
{
[Dependency]
public UserService UserService { private get; set; }
public bool AuthorizeCore(HttpContextBase httpContext, Privilege privilege)
{
ApplicationUser user = UserService.FindByName(httpContext.User.Identity.Name);
return UserService.UserHasPrivilege(user.Id, privilege.ToString());
}
}
¿Es esta una solución aceptable? ¿Tendré problemas desagradables en el futuro o tal vez haya una mejor manera de usar la Inyección de dependencias en un AuthorizeAttribute personalizado?