Dependency Injection mit Ninject und Filter-Attribut für asp.net mvc
Schreibe ich eine benutzerdefinierte Autorisierungs-Filter für asp.net mvc-3. Ich muss Spritzen, ein userservice in der Klasse, aber ich habe keine Ahnung, wie dies zu tun.
public class AuthorizeAttribute : FilterAttribute, IAuthorizationFilter
{
private IUserService userService;
private string[] roles;
public AuthorizeAttribute(params string[] roles)
{
this.roles = roles;
}
public void OnAuthorization(AuthorizationContext filterContext)
{
throw new NotImplementedException();
}
}
Ich bin mit ninject für dependency injection. Ich will nicht verwenden Sie eine Factory oder einen service locator pattern.
Meine Bindungen schauen, wie diese in den globalen.acsx:
internal class SiteModule : NinjectModule
{
public override void Load()
{
Bind<IUserService>().To<UserService>();
}
}
InformationsquelleAutor der Frage Shawn Mclean | 2011-05-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Siehe diese Antwort:
Benutzerdefinierte Autorisierungs-MVC 3 und Ninject IoC
Wenn Sie verwenden möchten constructor injection ist, dann müssen Sie erstellen Sie ein Attribut und einen filter.
Bindung:
Controller:
HTH...
InformationsquelleAutor der Antwort B Z
Ich würde hoch empfehlen B Z s Antwort. NICHT mit [Inject]!
Habe ich ein [Injizieren] wie Darin Dimitrov sagte, war möglich, und es entstehen eigentlich threading Probleme unter hoher Last, hohe Streit-Situationen in Verbindung mit .InRequestScope.
B Z Weg ist auch das, was auf dem Wiki, und ich habe schon viele Orte gesehen, wo Remo Gloor (Ninject-Autor) sagt, dass dies der richtige Weg, es zu tun
https://github.com/ninject/ninject.web.mvc/wiki/Filter-configurations
Downvote [Injizieren] Antworten hier, weil im ernst, Sie wird gebrannt bekommen (wahrscheinlich in der Produktion, wenn Sie nicht laden richtig testen vor!)
InformationsquelleAutor der Antwort John Culviner
Auf dem Weg wäre, um eine Eigenschaft Injektion und schmücken die Eigenschaft mit der
[Inject]
Attribut:Constructor injection funktioniert nicht gut mit Parametern, wie Sie nicht mehr in der Lage sein zu dekorieren Controller/Aktionen mit Ihnen. Man könnte nur Konstruktor-Injektion mit der filter-binding-syntax in NInject:
dann:
Den
BindFilter<>
Erweiterungs-Methode definiert wird, in derNinject.Web.Mvc.FilterBindingSyntax
- namespace, so stellen Sie sicher, dass Sie gebracht haben, in den Bereich vor dem Aufruf auf einen kernel.InformationsquelleAutor der Antwort Darin Dimitrov
Fand ich eine einfache Lösung für jeden Anlass, in denen Bauvorhaben nicht behandelt, von Ninject:
Eigentlich ist dies genau das, was ich mit meinem custom AuthorizeAttribute.
Viel einfacher, als die Implementierung einer eigenen FilterAttribute.
InformationsquelleAutor der Antwort Wolfgang