将 class 转换为可能的接口

Convert a class to a possible interface

我在不同的项目中有两个接口(这些项目没有相互引用),它们具有相同的方法,如下所示:

在第一个项目中我们有:

public interface IInterfaceA
{
     IAViewModel Do();
}
public interface IAViewModel
{
     int Id { get; set; }
}
public class ServiceA : IInterfaceA
{
     public IBViewModel Do()
     {
         return null;
     }
}

在第二个项目中我们有:

public interface IInterfaceB
{
    IBViewModel Do();
}
public interface IBViewModel
{
    int Id { get; set; }
}

我可以在运行时创建 ServiceA 的实例,使用来自第二个项目的一些 Reflection

问题是如何将该服务转换为 IInterfaceB。我的意思是我想在有人通过引用 IInterfaceB 进行开发时访问它的方法。

如果我正确理解了你更新后的问题,那么 ServiceA class 实现 IInterfaceA 的事实与问题无关(你甚至不知道实现的成员)。

就您似乎要问的问题而言 — 是否可以将 ServiceA 的实例视为 IInterfaceB 的实现实例 — 该问题的答案是 "no".

但是,您可以通过至少以下两种方式之一来估算该结果:

  1. 使用dynamic类型。在这里,对象不会显示为 IInterfaceB,但您至少可以通过类型为 dynamic.
  2. 的变量调用 Do() 方法
  3. ServiceA 的实例包装在适配器 class 中,它实现 IInterfaceB,并将其实现委托给 ServiceA 的实例。然后,您可以在需要实现 IInterfaceB.
  4. 的对象的地方使用包装器 class 的实例

例如:

class BAdapter : IInterfaceB
{
    private readonly ServiceA _serviceA;

    public BAdapter(ServiceA serviceA)
    {
        _serviceA = serviceA;
    }

    public IInterfaceB Do() { return _serviceA.Do(); }
}

您也可以在上面的示例中将 _serviceA(以及构造函数参数)声明为 dynamic,并获得相同的结果。