J'ai l'attribut de filtre suivant, et je peux passer un tableau de chaînes à l'attribut comme ceci [MyAttribute("string1", "string2")]
.
public class MyAttribute : TypeFilterAttribute
{
private readonly string[] _ids;
public MyAttribute(params string[] ids) : base(typeof(MyAttributeImpl))
{
_ids = ids;
}
private class MyAttributeImpl : IActionFilter
{
private readonly ILogger _logger;
public MyAttributeImpl(ILoggerFactory loggerFactory)
{
_logger = loggerFactory.CreateLogger<MyAttribute>();
}
public void OnActionExecuting(ActionExecutingContext context)
{
// HOW DO I ACCESS THE IDs VARIABLE HERE ???
}
public void OnActionExecuted(ActionExecutedContext context)
{
}
}
}
Comment passer le tableau de chaînes _ids
à la mise en place du filtre d'action? Suis-je en train de manquer quelque chose de vraiment évident?!
TypedFilterAttribute
a une propriété Argument
(de type object[]
) où vous pouvez passer des arguments au constructeur de l'implémentation. Donc, appliqué à votre exemple, vous pouvez utiliser ce code:
public class MyAttribute : TypeFilterAttribute
{
public MyAttribute(params string[] ids) : base(typeof(MyAttributeImpl))
{
Arguments = new object[] { ids };
}
private class MyAttributeImpl : IActionFilter
{
private readonly string[] _ids;
private readonly ILogger _logger;
public MyAttributeImpl(ILoggerFactory loggerFactory, string[] ids)
{
_ids = ids;
_logger = loggerFactory.CreateLogger<MyAttribute>();
}
public void OnActionExecuting(ActionExecutingContext context)
{
// NOW YOU CAN ACCESS _ids
foreach (var id in _ids)
{
}
}
public void OnActionExecuted(ActionExecutedContext context)
{
}
}
}