在asp.net Core 2.0中为注入的类指定参数。

10 浏览
0 Comments

在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(IOptions settings)
    {
        //这总是为空
        _mySettings = settings.Value;
    }
}

\n_mySettings 总是为空。这里有什么我漏掉的吗?

0
0 Comments

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文件中更改了值,是否需要重新启动应用程序才能获取最新值。

0
0 Comments

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`。

0
0 Comments

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()方法来配置AppSettings类的实例。然后可以通过构造函数注入AppSettings实例来访问配置文件中的值。

总结起来,不同版本的ASP.NET Core有不同的方式来指定注入类的参数。在ASP.NET Core 2.0版本中,可以通过构造函数注入IConfiguration接口来获取配置文件中的值。而在其他版本中,可以使用不同的方式来配置和注入类的参数。

以上就是ASP.NET Core 2.0版本中指定注入类参数的原因和解决方法的内容。希望对大家有所帮助!

0