【发布时间】:2015-05-03 04:28:46
【问题描述】:
我在不同的项目中有两个接口(这些项目没有相互引用),它们具有相同的方法,如下所示:
在第一个项目中,我们有:
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 来访问它的方法。
【问题讨论】:
-
“这些项目没有相互引用”是指在运行时加载其他程序集的类型还是其他什么?
-
@SaeedHamed 如果该类型未实现该接口,则您不能使用该接口调用该类型的方法。类型实现另一个具有相同方法的接口并不重要。
-
@phoog:请注意,在此代码示例中,
ServiceA确实不实现了具有相同方法的另一个接口。显示的唯一Do()方法返回IBViewModel的实例,这会阻止它成为IInterfaceA的实现。 -
@jdphenix 是的,你猜对了,我在运行时加载我的程序集。
标签: c# design-patterns reflection interface inversion-of-control