当前位置: 首页 > 知识库问答 >
问题:

调用两个不同服务的C#泛型方法

蔡修远
2023-03-14

我有以下的方法,这是添加产品使用注入的服务!它是在静态调用内部调用的,因此它是静态的!


    public static async Task AddNewProducts(Guid shopId)
        {

            var productAService = IoC.Services.GetService<IProductAService>();
            var added = await productAService.AddProduct(shopId);

        }

它工作良好,但我需要使它通用,以便我可以使用不同的服务与它。像这样的东西!



        public static async Task AddNewProducts<T>(Guid shopId) where T : IProductAService, IProductBService
        {

            var productService = IoC.Services.GetService<T>();
            var added = await productService.AddProduct(shopId);

        }

然而,第二个方法抱怨AddProduct方法不明确,不确定如何确保它从相关服务调用了正确的方法!

共有2个答案

墨寂弦
2023-03-14
public static async Task AddNewProducts<T>(Guid shopId) where T : IProductAService, IProductBService

这一行的问题是,您需要t同时实现两个接口,而不是只实现其中一个接口。您甚至还没有考虑到在尝试调用此函数时会出现的错误,因为您的类可能不会实现这两个函数。

这使我质疑为什么您认为需要这样约束您的tt的唯一用法是调用services.getService () ,因此对它的唯一约束应该是function所需的约束,这肯定不是您的两个接口。

公冶弘壮
2023-03-14

您的2个服务需要一个公共接口

public interface IProductService
{
    void AddProduct(Guid shopId);
}

public interface IProductAService : IProductService 
{ 
  //specifics to service A
}
public interface IProductBService : IProductService 
{ 
  //specifics to service B
}

则您的静态泛型方法仅约束到共享接口

public static async Task AddNewProducts<TProductService>(Guid shopId) 
                               where TProductService : IProductService
{
   var productService = IoC.Services.GetService<TProductService>();
   var added = await productService.AddProduct(shopId);
}
 类似资料:
  • 我一直在尝试泛型,很快我就遇到了一些我无法解释的事情 例如: 我不明白

  • 我有Java8 Groovy 2.4.12和下面的代码编译和运行。 但是如果你注释掉< code>return,编译器会说 此外,如果您注释掉值分配,那么它又可以了。因此,下面的代码编译并运行: 这似乎是一种特殊情况,只有在以下情况下才会发生: 注释 具有两个参数的泛型方法;第一个是泛型类型,第二个是相同泛型类型的接口 调用该泛型方法,第二个参数作为闭包,全部包装在另一个闭包中。 调用前的变量声明

  • 我正在尝试调试应用程序的流程。因此在这个过程中,我需要调试两个运行在两个不同tomcat服务器上的应用程序(其中一个应用程序中的方法调用不同应用程序的另一个方法)。我如何在eclipse中实现这一点(可能吗)? 注意:这两个应用程序都在同一个eclipse实例中,没有任何调试配置。

  • 问题内容: 我遇到了一个涉及静态泛型方法的奇怪情况。这是代码: 我为什么不必在表达式中指定任何类型参数?这是某种类型推断吗?如果我想对此进行明确说明,如何指定类型参数? 问题答案: 是的,根据JLS第15.12.2.8节,这是基于分配目标的类型推断。明确地说,您可以这样称呼:

  • 我有两个不同的服务器和,现在我有中的和中的。我试图加入这两个表在MySQL像这样。 但是我犯了一个错误。这在MYSQL中是可能的。

  • 问题内容: 我想知道用这样的签名调用静态方法的正确方法是什么: 由于某种原因,我很想这样称呼它: 但是除非我将其更改为:否则它不会编译: 我只是想知道为什么它不需要右侧的提示。而是给了我编译错误。它说它期望在右侧的提示后加上分号。第二个方法是调用该方法的正确方法吗?有人可以给我一些启示吗? 问题答案: 如图所示这里,要调用的方法的方法是: 该方法所在的类的名称在哪里。