繁体   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