gpt4 book ai didi

c# - 是否可以传递服务过滤器参数?

转载 作者:太空宇宙 更新时间:2023-11-03 17:38:23 25 4
gpt4 key购买 nike

我知道使用常规过滤器可以传递如下参数:

[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(...)
{
...
}

过滤器中注入(inject)了一些服务。但是每次我使用该服务时,我也会发送一个参数。

我将如何实现传入参数?我在网上找不到任何描述如何与常规过滤器类似的方法。服务过滤器甚至可能吗?

最佳答案

TypeFilterAttribute正是为此而定义的。

就像 服务过滤属性 除了它允许您传递不一定从 IoC 容器解析的构造函数参数。

例子:

[TypeFilter(typeof(LogFilter), Arguments = new object[] {"myLogger"})]  
[HttpGet("")]
public IEnumerable<Item> Get()
{
return this.repository.GetAll();
}

This article describes this neatly.

关于c# - 是否可以传递服务过滤器参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46800167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com