在asp.net Core 2.0中为注入的类指定参数。
在asp.net Core 2.0中为注入的类指定参数。
不确定我在这里漏掉了什么,但我无法从我的.NET Core应用程序的appsettings.json中获取值。我的appsettings.json如下:\n{\n \"AppSettings\": {\n \"Version\": \"One\"\n }\n}\n
\n启动类:\n
public class Startup { private IConfigurationRoot _configuration; public Startup(IHostingEnvironment env) { _configuration = new ConfigurationBuilder() } public void ConfigureServices(IServiceCollection services) { //在这里设置读取appsettings services.Configure(_configuration.GetSection("AppSettings")); } }
\n模型类:\n
public class AppSettings { public string Version{ get; set; } }
\n控制器类:\n
public class HomeController : Controller { private readonly AppSettings _mySettings; public HomeController(IOptionssettings) { //这总是为空 _mySettings = settings.Value; } }
\n_mySettings
总是为空。这里有什么我漏掉的吗?
ASP.NET Core 2.0中注入类时指定参数的问题出现的原因是,appsettings.json文件与ASPNETCORE_ENVIRONMENT变量相关联。ASPNETCORE_ENVIRONMENT可以设置为任何值,但框架支持三个值:Development、Staging和Production。如果未设置ASPNETCORE_ENVIRONMENT,它将默认为Production。对于这三个值,默认支持appsettings.ASPNETCORE_ENVIRONMENT.json文件:appsettings.Staging.json、appsettings.Development.json和appsettings.Production.json。可以使用上述三个应用程序设置json文件来配置多个环境。
在Startup类的构造函数中,可以通过Configuration["config_var"]来获取任何配置值。例如,可以使用Configuration["MyConfig"]来获取MyConfig的值。
对于嵌套对象,可以通过Configuration["MyConfig:SomethingNested"]来获取。
需要注意的是,ASP.NET Core当前加载的是appsettings.json + appsettings.{env.EnvironmentName}.json文件,而不仅仅是Development、Staging和Production appsettings.json文件。
有人问是否需要每次手动设置Windows变量ASPNETCORE_ENVIRONMENT,对此可以在全局设置环境变量。可以参考learn.microsoft.com/en-us/aspnet/core/fundamentals/...来了解如何设置环境变量。
还有一个问题是,如果在json文件中更改了值,是否需要重新启动应用程序才能获取最新值。
ASP.NET Core 2.0版本中存在一个问题,即无法在注入的类中指定参数。以下是解决该问题的原因和方法。
首先,你需要创建一个名为AnyName.cs的文件,并将下面的代码粘贴进去:
using System; using System.IO; using Microsoft.Extensions.Configuration; namespace Custom { static class ConfigurationManager { public static IConfiguration AppSetting { get; } static ConfigurationManager() { AppSetting = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("YouAppSettingFile.json") .Build(); } } }
上述代码创建了一个静态类`ConfigurationManager`,其中有一个静态属性`AppSetting`用于存储配置信息。在静态构造函数中,我们使用`ConfigurationBuilder`读取`YouAppSettingFile.json`文件并构建配置对象。
接下来,你需要根据你的需求创建一个类似下面的`.json`文件:
{
"GrandParent_Key" : {
"Parent_Key" : {
"Child_Key" : "value1"
}
},
"Parent_Key" : {
"Child_Key" : "value2"
},
"Child_Key" : "value3"
}
现在你可以在其他类中使用这个配置信息了。在使用之前,别忘了在需要使用的类中添加引用:
using Custom;
下面是获取配置值的代码示例:
string value1 = ConfigurationManager.AppSetting["GrandParent_Key:Parent_Key:Child_Key"]; string value2 = ConfigurationManager.AppSetting["Parent_Key:Child_Key"]; string value3 = ConfigurationManager.AppSetting["Child_Key"];
需要注意的是,在生产环境中不建议使用这种方法。这种方法可能会导致内存泄漏。如果你使用的是.NET Core,你可以在任何地方注入`IConfiguration`,只需要参考上面的答案。
我不建议在每个地方注入`IConfiguration`,因为这可能会导致一些安全问题;相反,你可以创建一些抽象层来封装需要的配置信息,并在需要时使用这些抽象层。这样,你的代码更安全,不会依赖于`IConfiguration`或任何具体实现。
另外,某些情况下在.NET Core 3.1中找不到`ConfigurationBuilder`。
ASP.NET Core提供了一种灵活的方式来配置和注入应用程序的设置。在不同的版本中,有不同的方式来指定注入类的参数。本文将介绍ASP.NET Core 2.0版本中指定注入类参数的原因和解决方法。
在ASP.NET Core 2.0版本中,可以通过构造函数注入IConfiguration接口来获取配置文件中的值。下面是一个示例:
// Program.cs public class Program { public static void Main(string[] args) { BuildWebHost(args).Run(); } public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup() .Build(); } // Startup.cs public class Startup { public IConfiguration Configuration { get; private set; } public Startup(IConfiguration configuration) { this.Configuration = configuration; } }
在这个示例中,我们在Startup类中通过构造函数注入了IConfiguration接口。然后可以在该类中使用Configuration属性来访问配置文件中的值。
在其他版本的ASP.NET Core中,有不同的方式来指定注入类的参数。例如,在ASP.NET Core 3.x版本中,可以使用泛型主机构建器来指定Startup类:
// Program.cs public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup(); }); } // Startup.cs public class Startup { public IConfiguration Configuration { get; private set; } public Startup(IConfiguration configuration) { this.Configuration = configuration; } }
在ASP.NET Core 6.x版本中,又有了一些新的变化。可以在Program类中直接配置应用程序,而无需使用Startup类。示例如下:
// Program.cs public class Program { public static void Main(string[] args) { var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllersWithViews(); builder.Services.Configure(builder.Configuration.GetSection("AppSettings")); var app = builder.Build(); // ... app.Run(); } }
在这个示例中,我们使用WebApplication.CreateBuilder()方法来创建应用程序构建器,并通过builder.Services.Configure
总结起来,不同版本的ASP.NET Core有不同的方式来指定注入类的参数。在ASP.NET Core 2.0版本中,可以通过构造函数注入IConfiguration接口来获取配置文件中的值。而在其他版本中,可以使用不同的方式来配置和注入类的参数。
以上就是ASP.NET Core 2.0版本中指定注入类参数的原因和解决方法的内容。希望对大家有所帮助!