【发布时间】:2018-07-27 20:45:41
【问题描述】:
由于某种我无法确定的原因,DI 无法在我的 .Net core 2 web api 中使用配置。代码如下:
程序.cs:
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
}
Startup.cs:
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.AddMvc();
services.AddSingleton<IMyService, MyService>();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseMvc();
}
}
我的控制器:
public class MyController : Controller
{
private readonly IMyService service;
public MyController(IMyService service)
{
this.service = service;
}
[HttpGet]
public IActionResult Get()
{
return Ok(service.MyMethod());
}
}
我的服务:
public class MyService : IMyService
{
private readonly IConfiguration config;
public MyService(IConfiguration config)
{
this.config = config;
}
public string MyMethod()
{
var test = config["MySetting"]; // <-- Breaks here. config is null.
}
}
我已经阅读了配置文档 here 和 SO 帖子 like this one,但似乎无法弄清楚为什么 DI 不适合我。有什么想法吗?我错过了什么?谢谢!
【问题讨论】:
-
抱歉,我在发布答案时误读了您的初始配置。在您调用
MyMethod()的地方,您的控制器和构造函数是什么样的? -
别担心,感谢您抽出宝贵时间帮助我。我用控制器代码更新了我的帖子。
-
你说的不工作是什么意思?如果是,抛出了什么异常?
-
看来您也需要注册
IConfiguration服务:services.AddSingleton<IConfiguration>(Configuration); -
@Fabio,空指针异常。在 MyService.cs 代码 sn-p 中查看我的评论。
标签: c# dependency-injection .net-core asp.net-core-2.0 asp.net-core-webapi