San*_*.91 0 c# dependency-injection .net-core asp.net-core asp.net-core-webapi
您好,我正在关注微软文档...
为了在 .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>();
});
}
Run Code Online (Sandbox Code Playgroud)
在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();
});
}
}
Run Code Online (Sandbox Code Playgroud)
尽管如此,当我在控制器中使用依赖项注入时,我无法注入 IConfiguration,并在调用控制器操作时出现以下错误(运行时错误):
无法找到类型“IrisDotNetCore.Controllers.LoginController”的合适构造函数。确保类型是具体的,并且为公共构造函数的所有参数注册了服务。
LoginController.cs代码:
[Route("api/[controller]")]
[ApiController]
public class LoginController : ControllerBase
{
IConfiguration _configuration;
LoginController(IConfiguration configuration)
{
_configuration = configuration;
}
}
Run Code Online (Sandbox Code Playgroud)
这里可能出了什么问题?
您的构造函数必须是公共的或内部的 - 请记住,在您的情况下,无法创建 LoginController 的实例(因为LoginController方法是私有的)。甚至错误消息(确保类型是具体的并且为公共构造函数的所有参数注册了服务)也表明了这一点。
| 归档时间: |
|
| 查看次数: |
1957 次 |
| 最近记录: |