Comment utiliser les Filtres d'actions avec l'Injection de Dépendance dans ASP.NET CORE?
Je utiliser le constructeur de base de l'injection de dépendance partout dans mon ASP.NET CORE
application et j'ai aussi besoin de résoudre des dépendances dans mon action filtres:
public class MyAttribute : ActionFilterAttribute
{
public int Limit { get; set; } //some custom parameters passed from Action
private ICustomService CustomService { get; } //this must be resolved
public MyAttribute()
{
}
public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
//my code
...
await next();
}
}
Puis dans le Contrôleur:
[MyAttribute(Limit = 10)]
public IActionResult()
{
...
Si j'ai mis ICustomService pour le constructeur, alors je n'arrive pas à compiler mon projet. Alors, comment puis-je supossed pour obtenir de l'interface instances dans l'action du filtre?
Pouvez-vous ajouter le setter de la propriété CustomService de sorte qu'il est accessible en écriture aussi? et d'ajouter ICustomService comme paramètre dans le constructeur?
Double Possible de ASP.Net Core, MVC (6) - Injecter en Action le service de Filtre
Double Possible de Comment puis-je ajouter un paramètre à une action de filtre dans asp.net?
Double Possible de ASP.Net Core, MVC (6) - Injecter en Action le service de Filtre
Double Possible de Comment puis-je ajouter un paramètre à une action de filtre dans asp.net?
OriginalL'auteur James Smith | 2016-08-31
Vous devez vous connecter pour publier un commentaire.
Si vous voulez éviter les le Service Localisateur de modèle que vous pouvez utiliser DI par le constructeur de l'injection avec un
TypeFilter
.Dans votre controller
Et votre
ActionFilterAttribute
n'a pas besoin d'accéder à un fournisseur de services instance plus.Pour moi l'annotation
[TypeFilter(typeof(MyActionFilterAttribute), Arguments = new object[] {10})]
semble être maladroit. Afin d'obtenir un plus lisible annotation comme[MyActionFilter(Limit = 10)]
de votre filtre à hériter deTypeFilterAttribute
. Ma réponse de Comment puis-je ajouter un paramètre à une action de filtre dans asp.net? montre un exemple de cette approche.IAsyncActionFilter
au lieu deIActionFilter
si vous avez besoin d'asyncOriginalL'auteur Ralf Bönning
Vous pouvez utiliser
Service Locator
:Noter que la méthode générique
GetService<>
est une extension de la méthode et de la vie dans l'espace de nomsMicrosoft.Extensions.DependencyInjection
.Si vous souhaitez utiliser le constructeur de l'injection de l'utilisation
TypeFilter
. Voir Comment puis-je ajouter un paramètre à une action de filtre dans asp.net?OriginalL'auteur adem caglin
Vous pouvez utiliser ServiceFilters pour instancier le ActionFilters vous avez besoin dans le contrôleur.
Dans le contrôleur:
Vous devez vous inscrire TrackingAttribute dans la dépendance récipient de sorte que le ServiceFilter peut la résoudre.
Lire plus à ce sujet à https://www.strathweb.com/2015/06/action-filters-service-filters-type-filters-asp-net-5-mvc-6/
OriginalL'auteur Francisco Goldenstein