[英]How do i get values from appsettings.json to BusinessLayer(my helper class) MVC 6
我的控制器通过调用API实习生返回用户详细信息
public class HomeController : Controller
{
public ActionResult AccountDetails(int userId)
{
return this.Content(new WebHelperService().GetAccountDetails(userId)), "application/json");
}
}
这是我在业务层中的 WebHelperService,我需要从appsettings.json获取价值
public class WebHelperService { private string url = null; public WebHelperService() { //url = ConfigurationManager.ConnectionString["ExternalApiUrl"].ToString(); // ConfigurationManager is not available in .net core. //So How do i read ExternalApiUrl from appsettings.josn,Which is the best way } public string GetAccountDetails(int userId) { return WebCall("{'userId':" + userId + "}"); } private string WebCall(string data) { WebRequest request = WebRequest.Create(url); // get the data from url and returns it } }
让我们暂时忘记您的特定用例,而只讨论一般的.net core中的设置。 重要的是,我认为您正在尝试从您的班级访问原始AppSettings,但是您实际上要执行的操作是将其DI到班级中。 因此,让我们这样做。
考虑您有一个类似于以下内容的appSettings.json:
{
"myConfiguration": {
"myProperty": true
}
}
现在,您需要创建一个POCO来保存这些设置。 像这样:
public class MyConfiguration
{
public bool MyProperty { get; set; }
}
在startup.cs中,应该有一个名为“ ConfigureServices”的方法。 在这里,您将像这样调用一个“配置”您的设置。
public void ConfigureServices(IServiceCollection services)
{
services.Configure<MyConfiguration>(Configuration.GetSection("myConfiguration"));
}
因此,现在您想将该设置对象注入到一个类中。 现在将其称为MyClass。 它看起来像以下内容:
public class MyClass : IMyClass
{
private readonly MyConfiguration _myConfiguration;
public MyClass(IOptions<MyConfiguration> myConfiguration)
{
_myConfiguration = myConfiguration.Value;
}
}
现在您可以访问您的配置了!
奖金!
相反,您可以使您的ConfigureServices方法如下所示:
public void ConfigureServices(IServiceCollection services)
{
//services.Configure<MyConfiguration>(Configuration.GetSection("myConfiguration"));
services.AddSingleton(Configuration.GetSection("myConfiguration").Get<MyConfiguration>());
}
现在要做的是将您的服务绑定到实际的类上,而不是IOptions对象上。
现在,当您将其注入到类中时,您将注入POCO设置类,而不是IOptions。 像这样:
public class MyClass : IMyClass
{
private readonly MyConfiguration _myConfiguration;
public MyClass(MyConfiguration myConfiguration)
{
_myConfiguration = myConfiguration;
}
}
进一步阅读:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.