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 關注
- 145 瀏覽
添加回答
舉報