.net 如何引用我在HostBuilder中添加的单例示例,作为我定义的作用域示例的一部分?

ff29svar  于 2023-01-14  发布在  .NET
关注(0)|答案(2)|浏览(139)

我可能找错了人,但是,我有以下几点:

var host = new HostBuilder() 
    .ConfigureServices(services => 
    {
        services.AddSingleton<IHttpClientFactory>();
        services.AddScoped<IPaintMapper, PaintMapper(XXXXX, config)>();
    };

我想将IHttpClientFactory传递到我的作用域“PaintMapper”中,我也将为它提供一个配置。
我该怎么做呢?因为IHttpClientFactory和“config”都是设置作用域示例所必需的。
我已经使用这个重构有一段时间了,我认为我的大脑处理得不是很好,所以如果我错过了一些正常的东西,我很抱歉-但是我没有看到其他地方这样做,所以我可能错过了一些东西。

mrzz3bfm

mrzz3bfm1#

你可以这样做

services.AddScoped<IPaintMapper, PaintMapper>(provider => {
    var config = provider.GetRequiredService<Config>();
    var httpFactory = provider.GetRequiredService<IHttpClientFactory>();
    // Do stuff with mapper
    return mapper;   
});
6kkfgxo0

6kkfgxo02#

通常的方法是只注册IHttpClientFactory和config类型,然后从ctor解析它们。作用域服务可以解析单例服务:

services.AddHttpClient(); // install Microsoft.Extensions.Http  nuget
services.AddXXX<PaintMapperSettings>();
services.AddScoped<IPaintMapper, PaintMapper>();

class PaintMapperSettings
{
    
}
class PaintMapper
{
    public PaintMapper(IHttpClientFactory factory, PaintMapperSettings settings)
    {
        
    }
}

有关注册和解析设置的选项-请参见docs。就我个人而言,我倾向于使用options pattern

相关问题