通过依赖关系注入将配置传递给 Web 作业

此问题基于与此答案相关的注释。


总而言之,问题是如何在调用 ConfigureServices 设置依赖项时,如何将配置设置传递到 Web 作业,而不将 IConfiguration 接口作为依赖项注入。


我本来以为这将是一个很好的方法:


IHostBuilder builder = new HostBuilder;


...


builder.ConfigureServices((context, services) =>

{

    services.AddSingleton<IMyModelClass, MyModelClass>(sp => new MyModelClass(context.Configuration));

    services.AddSingleton<IMyServiceClass, MyServiceClass>(sp => new MyServiceClass(new MyModelClass()));

})

在这里,MyModelClass是一个读取配置设置的类,如下所示:


public class MyModelClass : IMyModelClass

{

    public string MySetting { get; set; }


    public MyModelClass(IConfiguration config)

    {

        this.MySetting = config["MySetting"];

    }

}

因此,它封装了这些设置,并且可以传递给需要访问配置设置的其他类(如 MyServiceClass)。


但这似乎不是最好的方法。还有进一步的建议吗?


郎朗坤
浏览 113回答 1
1回答

蝴蝶刀刀

因此,让我们假设有以下配置{&nbsp; "MyModelSection": {&nbsp; &nbsp; "MySetting": "SomeValue"&nbsp; }}这只是一个非常简单的例子。关联的模型将如下所示public class MyModelClass: IMyModelClass {&nbsp; &nbsp; public string MySetting { get; set;}}以上内容可以从配置中提取,并注册到服务builder.ConfigureServices((context, services) => {&nbsp; &nbsp; var configuration = context.Configuration.&nbsp; &nbsp; var myModel = configuration.GetSection("MyModelSection").Get<MyModelClass>();&nbsp; &nbsp; services.AddSingleton<IMyModelClass, MyModelClass>(myModel);&nbsp; &nbsp; services.AddSingleton<IMyServiceClass, MyServiceClass>();})
打开App,查看更多内容
随时随地看视频慕课网APP