Ho cercato a lungo una soluzione per il mio problema. Ho un AuthorizeAttribute personalizzato che ha bisogno di una dipendenza per un "Servizio" che ha accesso a un DbContext. Purtroppo la Iniezione di Dipendenza non ha funzionato nell'autorizzazione AuthorizeAttribute e era sempre nullo.asp.net MVC5 - Iniezione delle dipendenze e AuthorizeAttribute
Mi è venuta una (per me) soluzione accettabile. Ora voglio sapere se la mia soluzione può causare un comportamento 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());
}
}
Questa è una soluzione accettabile? In futuro mi imbatterò in problemi fastidiosi o forse c'è un modo migliore di usare Dependency Injection in un AuthorizeAttribute personalizzato?