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

时间:2017-02-26 19:39:21

标签: c# asp.net-core-mvc

我的控制器通过调用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/en-us/aspnet/core/mvc/con..

1 个答案:

答案 0 :(得分:1)

让我们暂时忘掉您的特定用例,然后只谈谈.net核心中的设置。重要的是,我认为您正在尝试从您的班级访问原始AppSettings,但您实际想要做的是将它们引入您的班级。所以,让我们这样做。

考虑一下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;
    }
}

进一步阅读: