62,047
社区成员
发帖
与我相关
我的任务
分享
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.Configure<DAL._DBConnStr>(Configuration.GetSection("ConnectionStrings"));
services.AddControllers();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
//app.UseRouting();
app.UseAuthorization();
//app.UseEndpoints(endpoints =>
//{
// endpoints.MapControllers();
//});
app.Run(async (context) => {
await context.Response.Body.WriteAsync(System.Text.Encoding.Default.GetBytes(DAL._DBConnStr.PcsConnectionString));
});
}
}
报错:
An unhandled exception occurred while processing the request.
ArgumentNullException: String reference not set to an instance of a String. (Parameter 's')
System.Text.Encoding.GetBytes(string s)
services.Configure<DAL._DBConnStr>(Configuration.GetSection("ConnectionStrings"));
这句好像没起作用,没有给变量赋值
附:
public class _DBConnStr
{
public static string PcsConnectionString { get; set; }
}
public class ConnectionStrings
{
public string DefaultConnection { get; set; }
}
这里面的DefaultConnection名称是和appsetting.josn的ConnectionStrings节下的每个子项名相同么,如果有多个就写多个属性么,可以用静态属性么?
2、
public Home(IOptions<ConnectionStrings> optionAccessor)
{
var defaultConnectionString = optionAccessor.Value.DefaultConnection;
}
optionAccessor.Value.DefaultConnection;为什么还要加value,这个类的固定用法么?
[/quote]
1. 是的,每个子项名相同,有多个就写多个属性。
静态属性我没试过,你可以试一下,问题是,为什么要用静态属性? IOptions在DI的时候本来就是singleton的。
2.固定用法,写了你就知道了
public class ConnectionStrings
{
public string DefaultConnection { get; set; }
}
这里面的DefaultConnection名称是和appsetting.josn的ConnectionStrings节下的每个子项名相同么,如果有多个就写多个属性么,可以用静态属性么?
2、
public Home(IOptions<ConnectionStrings> optionAccessor)
{
var defaultConnectionString = optionAccessor.Value.DefaultConnection;
}
optionAccessor.Value.DefaultConnection;为什么还要加value,这个类的固定用法么?
public void ConfigureServices(IServiceCollection services)
{
//数据库配置
services.AddDbContextPool<EntityContext>(options =>
{
options.UseMySQL(Configuration.GetConnectionString("EntityContext"), b => b.MigrationsAssembly("Guavo.Data"));
});
.......
appsettings.json文件中:
"ConnectionStrings": {
"EntityContext": "server={your server};port=3306;database={yourDb};uid={username};password={password};"
}
public class ConnectionStrings
{
public string DefaultConnection { get; set; }
}
在Startup.cs的ConfigureServices里绑定设定
services.Configure<ConnectionStrings>(Configuration.GetSection("ConnectionStrings"));
在Controller或Service或...内用框架DI容器已经默认注入的Microsoft.Extensions.Options.IOptions获得设定的accessor。
public Home(IOptions<ConnectionStrings> optionAccessor)
{
var defaultConnectionString = optionAccessor.Value.DefaultConnection;
}