【发布时间】:2020-06-04 20:37:08
【问题描述】:
您好,我正在关注微软文档...
为了在 .NET Core Web API 中将配置作为单例注入
这是我加载配置的 Program.cs 代码:
public class Program
{
public static Dictionary<string, string> arrayDict =
new Dictionary<string, string>
{
{"connString", "Data Source =xxx/xxx;User Id =xxx;Password =xxx"}
};
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(builder =>
{
builder.AddInMemoryCollection(arrayDict);
builder.AddJsonFile(
"appsettings.json", optional: false, reloadOnChange: false);
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
在 Startup.cs 中我使用以下功能
public class Startup
{
private readonly IConfiguration Configuration;
public Startup(IConfiguration config)
{
Configuration = config;
}
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddSingleton<IConfiguration>(Configuration);
}
// 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.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
当我在控制器中使用依赖注入时,我无法注入 IConfiguration,并在调用控制器操作时出现以下错误(运行时错误):
找不到适合“IrisDotNetCore.Controllers.LoginController”类型的构造函数。确保类型是具体的,并且为公共构造函数的所有参数注册了服务。
LoginController.cs 代码:
[Route("api/[controller]")]
[ApiController]
public class LoginController : ControllerBase
{
IConfiguration _configuration;
LoginController(IConfiguration configuration)
{
_configuration = configuration;
}
}
这里可能有什么问题?
【问题讨论】:
-
这可能是XY problem。你为什么要尝试注入
IConfiguration。这可以看作是代码异味。
标签: c# asp.net-core .net-core dependency-injection asp.net-core-webapi