由于某些我无法确定的原因,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();
}
启动.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();
}
}
我的 Controller :
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 不适合我。有什么想法吗?我缺少什么?谢谢!
请您参考如下方法:
这对我来说效果很好。
如果您需要将“MySettings”部分添加到 DI,请创建您的配置模型类 MySettingsConfiguration 并将其添加到 Startup.cs
services.Configure<MySettingsConfiguration>(Configuration.GetSection("MySettings"));
这可以稍后在您的构造函数中使用,或者通过作用域服务
public MyService(IOptionsSnapshot<MySettingsConfiguration> mySettingsConfiguration) { }
或者使用单例服务
public MyService(IOptions<MySettingsConfiguration> mySettingsConfiguration) { }
希望对您有所帮助。
