簡體   English   中英

我如何引用我在 HostBuilder 中添加的 singleton 實例,作為我定義的 Scoped 實例的一部分?

[英]How do i reference a singleton instance i'm adding in the HostBuilder, as a part of a Scoped instance i'm defining?

我可能在這里咆哮錯誤的樹,但是,我有以下內容:

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

我想將 IHttpClientFactory 傳遞到我的作用域“PaintMapper”中,我還將為其提供一個配置。

我該怎么做? 由於 IHttpClientFactory 和“配置”都是設置作用域實例所必需的。

我進行此重構有一段時間了,認為我的大腦處理得不是特別好,所以如果我遺漏了一些正常的東西,我深表歉意——但我沒有看到其他地方這樣做過,所以我可能遺漏了一些東西。

通常的做法是只注冊IHttpClientFactory和配置類型,然后從 ctor 解析它們。 范圍服務可以解決 singleton 的:

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

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

有關注冊和解析設置的選項 - 請參閱文檔 我個人傾向於使用選項模式

你可以這樣做

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM