我想在类库中的静态类中使用appsettings.json值现在我知道了如何将json值绑定到像这样的程序.cs中的类
程序.cs
ConfigurationManager configuration = builder.Configuration;
builder.Services.Configure<APConfig>(configuration.GetSection(APConfig.Position));
APConfig.cs
public class APConfig
{
public const string Position = "APConfig";
public string RootPath { get; set; }
public string API_URL { get; set; }
public string TOKEN { get; set; }
public string pwdkey { get; set; }
public string pwdkey1 { get; set; }
public string pwdkey2 { get; set; }
public string GetProperty(string keyStr)
{
string value = Utility.DecryptTagContent((string)this.GetType().GetProperty(keyStr).GetValue(this));
return value;
}
}
如何在静态类中使用绑定的APConfig?
我找到了一个解决方案:
public static class HttpContext
{
private static IHttpContextAccessor _accessor;
public static Microsoft.AspNetCore.Http.HttpContext Current => _accessor.HttpContext;
internal static void Configure(IHttpContextAccessor accessor)
{
_accessor = accessor;
}
}
public static class StaticHttpContextExtensions
{
public static void AddHttpContextAccessor(this IServiceCollection services)
{
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
}
public static IApplicationBuilder UseStaticHttpContext(this IApplicationBuilder app)
{
var httpContextAccessor = app.ApplicationServices.GetRequiredService<IHttpContextAccessor>();
HttpContext.Configure(httpContextAccessor);
return app;
}
}
然后使用
HttpContext.Current.Session.SetString(key, value);
HttpContext.Current.Session.GetString(key);
我也喜欢对配置值进行静态访问。
这个StackOverflow问题有几个答案可能会有所帮助:ASP.NET Core--从静态类访问配置
关键是您需要在启动时运行的代码,该代码将IConfiguration
对象或其值分配给静态变量。
然后,您可以对这些值进行迭代,并将它们放在一个静态列表中。类似于公共静态List<KeyValuePair<string, string>> Config= _config.AsEnumerable().ToList();
或者您可以将这些值放在公共静态ReadOnlyDictionary<string, object>
中
访问配置需要一个IConfiguration
实例,该实例可以使用依赖注入获得。
然后,您的类应该是非静态的,并具有DI构造函数。