簡體   English   中英

c# 9中,如何聲明一個靈活的接口?

[英]In c# 9, How To Declare a Flexible Interface?

我正在使用 Entity Framework Core,並希望有兩個不同的 SpeakerQueries 實現,每個實現都使用不同的 EF Core 數據上下文。

我原來的 class 只包含一個數據上下文,但我已經擴展它現在包含兩個。

這是我的 c# 接口定義如下:

public interface ISpeakerQueries
{
    IQueryable<Speaker> GetSpeakers(
        [ScopedService] ApplicationDbContext context, [ScopedService] ApplicationDbContextAlt contextAlt);
    ...

我真的只想用每種方法調用一個數據上下文,但不確定如何定義我的接口以允許這種情況發生。

換句話說,我希望 GetSpeakers 的具體實現是

public class SpeakerQueriesAlt : ISpeakerQueries
{
    [UseApplicationDbContextAlt]
    [UsePaging]
    public IQueryable<Speaker> GetSpeakers(
        [ScopedService] ApplicationDbContextAlt context)
    { ...

或者

public class SpeakerQueries : ISpeakerQueries
{
    [UseApplicationDbContext]
    [UsePaging]
    public IQueryable<Speaker> GetSpeakers(
        [ScopedService] ApplicationDbContext context)
    { ...

我想我可以做到這一點,但不確定我應該如何聲明接口。 我在頂部聲明的接口不起作用,因為它需要兩個參數而不是一個。

你在尋找 HotChocolate 和他們的車間樣品嗎? 如果沒有,則忽略 rest :)

使用方法注入是將服務注入 HotChocolate 庫執行的正確方法。

我試圖了解要達到的目標是什么? 您是否嘗試 (A) 創建兩個查詢端點,它們將使用不同的 dbcontext 並且只返回該特定上下文的數據? 或者您是否嘗試創建 (B) 一個查詢,該查詢將返回兩個 dbcontexts 的所有發言者?

如果是 A,那么我認為您可以輕松地從中提取接口,但您可能必須給它們兩個不同的名稱。

如果是 B,那么我將創建一個注入兩個不同上下文的服務,並負責將結果連接在一起。 或者您可以創建自己的中間件/管道,或者甚至更好地創建 3 個 graphql 服務器,其中服務器 A 從上下文 1 返回數據,服務器 B 從上下文 2 返回數據,您的服務器 C 使用模式拼接。

如前所述,如果這不是 HC 和 Graphql 就忽略我的回答

暫無
暫無

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

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