繁体   English   中英

我如何从appsettings.json获取值到BusinessLayer(我的助手类)MVC 6

[英]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");
            }
        }
  1. 这是我在业务层中的 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 } } 
    1. 我是否需要从mvc6中的控制器一直进行设置? 参考: docs.microsoft.com/zh-cn/aspnet/core/mvc/con ..

让我们暂时忘记您的特定用例,而只讨论一般的.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM