首頁 > 後端開發 > C++ > 如何在ASP.NET Core中解析相同接口的多個實現?

如何在ASP.NET Core中解析相同接口的多個實現?

DDD
發布: 2025-01-29 21:11:10
原創
860 人瀏覽過

How to Resolve Multiple Implementations of the Same Interface in ASP.NET Core?

在 ASP.NET Core 中解決多個實現註冊

ASP.NET Core 本身並不支持註冊多個可通過鍵區分的同一接口的實現。為了克服這個限制,開發人員依賴於替代方法,例如工廠模式。但是,這些解決方案會導致依賴性增加,並可能違反依賴倒置原則 (DIP)。

更有效的解決方法是使用共享委託 ServiceResolver 將鍵值映射到具體的實現。以下是具體步驟:

  1. 委託聲明:

    定義一個委託 IService ServiceResolver(string key) 用於服務解析。

  2. 服務註冊:

    Startup.cs 中將每個具體實現註冊為瞬態服務:

    <code class="language-csharp">services.AddTransient<ServiceA>();
    services.AddTransient<ServiceB>();
    services.AddTransient<ServiceC>();</code>
    登入後複製
  3. 鍵到類型的映射:

    配置 ServiceResolver 委託以將鍵值映射到具體的實現:

    <code class="language-csharp">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();
        }
    });</code>
    登入後複製
  4. 服務使用:

    ServiceResolver 注入到需要註冊服務的類中。例如:

    <code class="language-csharp">public class Consumer
    {
        private readonly IService _aService;
    
        public Consumer(ServiceResolver serviceAccessor)
        {
            _aService = serviceAccessor("A");
        }
    
        public void UseServiceA()
        {
            _aService.DoTheThing();
        }
    }</code>
    登入後複製

這種方法提供了一種靈活的方式來註冊和解析同一接口的多個實現,從而實現更有效的依賴管理並遵守 DIP。雖然它不是 ASP.NET Core 的內置功能,但它為常見的 DI 挑戰提供了一種可行的解決方案。

以上是如何在ASP.NET Core中解析相同接口的多個實現?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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