【发布时间】:2013-12-20 08:50:08
【问题描述】:
我在同一个程序集中定义了两个接口 IConfigurationManager 和 ILocator(我们称之为程序集“A”)和同一个命名空间。
有一个名为“B”的启动项目,它具有对程序集“A”的“项目引用”。
Assembly A 也包含这两个接口的具体实现。我在程序集 A 上有一个“构建后事件”,当我从 Visual Studio 2012 运行应用程序时,它将 DLL 复制到“B”项目的“bin\debug”文件夹中。
在 app.config 文件中,我提到了当我想要两个接口的具体实现时使用哪个程序集和类型。 (我需要在运行时解析类型映射,并且将在不同的程序集中拥有接口和实现,而我很多人根本没有开发。)
在我的代码中,我从启动项目的“bin\debug\”文件夹中加载程序集 A(使用 Assembly.LoadFile())。然后我遍历所有类型并使用以下代码检查一个类是否属于ILocator 类型:
if(type.GetInterfaces.Contains(typeof(IConfigurationManager))
这会返回 FALSE,但另一方面,ILocator 的类似代码会返回 TRUE。 为什么会这样?我也尝试使用IsAsseignableFrom(),但得到了相同的结果。
在检查类实现的接口时,为什么一个调用成功而另一个调用失败?
注意:我知道 Unity 容器等。但我仍然有与使用反射进行类型检查有关的相同问题。
【问题讨论】:
-
什么是 typeof(
).GetInterfaces() 输出? -
@zabulus:当我附加一个调试器时,我可以在GetInterfaces()返回的列表中清楚地看到
IConfigurationManager接口。但是,if(type.GetInterfaces.Contains(typeof(IConfigurationManager))返回错误! .. 但奇怪的是,ILocator并非如此!
标签: c# .net typeof reflection