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

如何在ASP.NET Core中註冊和解析多個接口實現?

Susan Sarandon
發布: 2025-01-29 21:21:12
原創
398 人瀏覽過

How to Register and Resolve Multiple Interface Implementations in ASP.NET Core?

在ASP.NET Core中註冊多個接口實現

在ASP.NET Core中,由於缺乏顯式的基於鍵的註冊,註冊實現同一接口的多個服務會帶來挑戰。以下是一個全面的解決方案,用於解決此問題並避免工廠模式的缺點:

註冊具體實現

要註冊接口的多個具體實現,請多次使用AddTransient方法,並使用不同的類型:

<code class="language-csharp">services.AddTransient<ServiceA>();
services.AddTransient<ServiceB>();
services.AddTransient<ServiceC>();</code>
登入後複製

自定義服務解析器

創建一個名為ServiceResolver的自定義委託,它接收一個字符串鍵並返回相應的服務實例:

<code class="language-csharp">public delegate IService ServiceResolver(string key);</code>
登入後複製

ConfigureServices方法中,註冊自定義解析器:

<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>
登入後複製

在使用者中進行依賴注入

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>
登入後複製

使用靜態數據的構造函數注入

要在註冊期間將靜態數據注入構造函數,請定義一個返回服務實例並接受必要數據作為參數的方法:

<code class="language-csharp">public class ServiceFactory
{
    public ServiceA CreateServiceA(string efConnectionString)
    {
        return new ServiceA(efConnectionString);
    }

    // ... (其他服务的类似方法)
}</code>
登入後複製

將工廠註冊為單例,確保它在應用程序的整個生命週期中可用:

<code class="language-csharp">services.AddSingleton<ServiceFactory>();</code>
登入後複製

ConfigureServices方法中,將服務類型綁定到工廠方法:

<code class="language-csharp">services.AddTransient<ServiceA>(serviceProvider =>
{
    var factory = serviceProvider.GetService<ServiceFactory>();
    return factory.CreateServiceA("yourConnectionString");
});</code>
登入後複製

通過這種方法,您可以無縫地註冊和解析接口的多個實現,將靜態數據注入構造函數,並避免工廠模式的缺點,同時遵守ASP.NET Core中依賴注入的原則。

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

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