我知道,与常规的过滤器,你可以传递参数,像这样:是否可以传递服务过滤器参数?
[Filter(param="value")]
public ActionResult Action()
{
return View();
}
public class Filter : ActionFilterAttribute
{
public string param { get; set; }
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
// do something with your parameter...
}
}
我有一个服务过滤:
// MyCustomFilter.cs
namespace MyNamespace.Filters
{
public class MyCustomFilter : ActionFilterAttribute
{
public string param { get; set; }
// The services I'm injecting.
private ILogger _logger;
private IM3ObjectRepository _repo;
public MyCustomFilter(ILogger<MyCustomFilter> logger, IM3ObjectRepository repo)
{
_logger = logger;
_repo = repo;
}
public override void OnActionExecuting(ActionExecutingContext ctx)
{
_logger.LogInformation("Filter is working.");
// Get stuff from object repository, based on passed-in parameter.
}
}
}
// Startup.cs
public void ConfigureServices(IServiceCollection services)
{
...
services.AddSingleton<IM3ObjectRepository, M3ObjectRepository>();
services.AddScoped<M3UISecurityFilter>();
...
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
loggerFactory.AddSerilog();
...
}
// Example of filter being used.
[ServiceFilter(typeof(MyCustomFilter))]
public IActionResult Action(...)
{
...
}
该过滤器注入到它的一些服务。但每次使用该服务时,我也会发送一个参数。
我将如何实现传递参数?我无法在网上找到任何描述如何与常规过滤器类似的操作。服务过滤器甚至可能吗?
我用更多的代码编辑了这个问题。 当我尝试了你的建议时,编译器抱怨主构造函数(_There没有给出对应于'ServiceFilterAttribute.ServiceFilterAttribute(Type)'的必需形式参数'类型'的参数)以及** OnActionExecuting **方法(_MyCustomFilter.OnActionExecuting(ActionExecutingContext)':找不到合适的方法override_)。 –