Skip to main content
 首页 » 编程设计

c#之.Net core 2 web api 没有将配置注入(inject)服务

2024年02月25日36lidabo

由于某些我无法确定的原因,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) { } 

希望对您有所帮助。