次のフィルター属性があり、この[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)
{
}
}
}
文字列配列_ids
をアクションフィルターの実装に渡すにはどうすればよいですか?私は本当に明白な何かを逃していますか?
TypedFilterAttribute
にはArgument
プロパティ(タイプobject[]
)があり、実装のコンストラクターに引数を渡すことができます。だからあなたの例に適用すると、このコードを使うことができます:
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)
{
}
}
}