3 回答
TA贡献1841条经验 获得超3个赞
我建议您使用IOptions<T>
.Net Core 支持的所有优势从文件中检索配置。您可以在此处查看如何操作。
此外,要将其注入到依赖注入解析器中,请将其作为瞬态或作用域或单例添加services.AddTransient(p => new MyService(mySettings));
到您的ConfigureServices()
函数中(决定哪一个更适合您)。
如果您坚持使用IConfiguration
来检索配置并解决您遇到的问题,您应该IConfiguration
像这样注入您的实例services.AddSingleton(Configuration);
。希望这能解决您的问题。
TA贡献2021条经验 获得超8个赞
根据此处的一些反馈,可以通过添加到 Startup.cs 来执行以下操作。
services.AddMvc(options => {
options.Filters.Add(new ERPFilter(Configuration));
}
可以根据上述要点考虑 url 以提高性能。
url = ...
services.AddMvc(options => {
options.Filters.Add(new ERPFilter(url));
}
TA贡献2041条经验 获得超4个赞
要根据其他人和我自己昨天提供的评论提供答案,建议注入IOptions<T>您的过滤器或任何其他需要注入配置数据的对象。
您可以像这样将您的 ERP 设置添加到您的 appSettings.json 文件中
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*",
"Erp": {
"Url": "https://localhost"
}
}
要将您的设置注入依赖项,您必须通过注册它ConfigureServices,您还会注意到CompanyFilter已添加到IServiceCollectionvia AddTransient,这是为了允许ServiceFilterAttribute在稍后阶段解决它并注入过滤器具有的任何依赖项。
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.Configure<ErpSettings>(Configuration.GetSection("Erp"));
services.AddTransient<CompanyFilter>();
}
要将过滤器应用于控制器操作,请使用 ServiceFilterAttribute(Type)`
[HttpGet]
[ServiceFilter(typeof(CompanyFilter))]
public ActionResult<IEnumerable<string>> Get()
{
return new string[] { ViewBag.ERPUrl };
}
在上面的代码中,您将看到我返回 ViewBag.ERPUrl,这是因为您ComapnyFilter已覆盖OnActionExecuting在调用操作之前执行的操作,而OnActionExecuted在您的操作完成后且在响应返回给调用者之前调用。
这就是CompanyFilter现在的样子,你会注意到构造函数现在接受IOptions<ErpSettings>
public class CompanyFilter : ActionFilterAttribute
{
private readonly ErpSettings erpSettings;
public CompanyFilter(IOptions<ErpSettings> erpSettings)
{
this.erpSettings= erpSettings.Value;
}
public override void OnActionExecuting(ActionExecutingContext context)
{
if (context.Controller is Controller controller)
controller.ViewBag.ERPUrl = erpSettings.Url;
}
}
完成所有这些后,这就是响应
- 3 回答
- 0 关注
- 119 浏览
添加回答
举报