假设我有一个界面ITest
:
public interface ITest
{
void PrintMachineInfo();
}
再加上两个实现:
[Export("MachineName", typeof(ITest))]
[PartCreationPolicy(CreationPolicy.Shared)]
public class Test1 : ITest
{
public void PrintMachineInfo()
{
Console.WriteLine(Environment.MachineName);
}
}
[Export(typeof(ITest))]
[PartCreationPolicy(CreationPolicy.Shared)]
public class Test2 : ITest
{
public void PrintMachineInfo()
{
Console.WriteLine(Environment.OSVersion);
}
}
然后,我尝试检索以下所有实例ITest
:
var foo = ServiceLocator.Current.GetAllInstances<ITest>();
foreach (var test in foo)
{
test.PrintMachineInfo();
}
事实证明,只能Test2
返回实例。由于合同名称,它只是找不到Test1
.
我使用 MEF + ServiceLocator + MefAdapter来运行所有这些东西。从我的调试来看,MefAdapter 覆盖了 中的方法DoGetAllInstances(Type serviceType)
,ServiceLocatorImplBase
但它只提供了一个参数serviceType
。
ITest
那么,无论实现是否导出了联系人姓名,如何使用 ServiceLocator获取所有实例?