首頁 > 後端開發 > C++ > 如何使用ASP.NET Core中的自定義鍵解析多個服務實現?

如何使用ASP.NET Core中的自定義鍵解析多個服務實現?

Patricia Arquette
發布: 2025-01-29 21:16:11
原創
618 人瀏覽過

How to Resolve Multiple Service Implementations with Custom Keys in ASP.NET Core?

在 ASP.NET Core 中使用自定義鍵解析多個服務實現

在 ASP.NET Core 中註冊同一接口的多個具體實現時,您可能會遇到定義唯一鍵來區分它們的限制。但是,可以使用委託在運行時解析合適的實現來解決此問題。

為此,請按照以下步驟操作:

  1. 定義共享委託:

    • 創建一個名為 ServiceResolver 的委託,它接受一個鍵並返回一個 IService 實例。
  2. 註冊具體實現和映射鍵:

    • 使用 AddTransientStartup.cs 文件中註冊每個具體實現。
    • 添加一個 ServiceResolver 瞬態註冊。在此註冊中,使用 switch 語句使用 GetService 將鍵映射到相應的具體實現。
  3. 使用 ServiceResolver:

    • 在通過 DI 註冊的類中,使用 ServiceResolver 獲取所需的實現。將適當的鍵作為參數傳遞給解析器。

示例:

<code class="language-csharp">public delegate IService ServiceResolver(string key);

public void ConfigureServices(IServiceCollection services)
{
    services.AddTransient<ServiceA>();
    services.AddTransient<ServiceB>();
    services.AddTransient<ServiceC>();

    services.AddTransient<ServiceResolver>(serviceProvider => key =>
    {
        switch (key)
        {
            case "A":
                return serviceProvider.GetService<ServiceA>();
            case "B":
                return serviceProvider.GetService<ServiceB>();
            case "C":
                return serviceProvider.GetService<ServiceC>();
            default:
                throw new KeyNotFoundException();
        }
    });
}

public class Consumer
{
    private readonly IService _aService;

    public Consumer(ServiceResolver serviceAccessor)
    {
        _aService = serviceAccessor("A");
    }

    public void UseServiceA()
    {
        _aService.DoTheThing();
    }
}</code>
登入後複製

注意: 此解決方案不會解決在註冊期間將數據注入構造函數的問題。為此,請考慮探索其他機制,例如 IOption 或自定義容器實現。

This revised response maintains the image and its original format while rewording the text for improved clarity and flow. The code example remains unchanged as it's already well-formatted.

以上是如何使用ASP.NET Core中的自定義鍵解析多個服務實現?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板