我一直在試圖製作一個模塊,類似於命令行的應用程序。每個模塊可以容納多個命令。例如,「模塊A」可以具有諸如「退出」和「回聲」之類的命令。我用下面的代碼加載和初始化模塊,我...接口的實現無效
foreach (string Filename in Directory.GetFiles(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Modules"), "*.dll"))
{
Assembly Asm = Assembly.LoadFrom(Filename);
foreach (Type AsmType in Asm.GetTypes())
{
if (AsmType.GetInterface("ICommandModule") != null)
{
object CommandObject = Activator.CreateInstance(AsmType);
ICommandModule CommandModule;
if (CommandObject is ICommandModule)
{
CommandModule = (ICommandModule)CommandObject;
}
else
{
throw new Exception("CommandObject is not a valid ICommandModule.");
}
...
我知道一個事實,即它加載的模塊(Core.dll)是完全符合於ICommandModule接口。當我確認if (CommandObject is ICommandModule)
時,它會拋出異常。當我將if語句全部刪除時,它告訴我無法將CommandObject
轉換爲ICommandModule
。
您的ICommandModule接口是否在不同的名稱空間中聲明? – Grozz 2010-10-07 21:50:29
如果你做了ICommandModule會發生什麼CommandObject =(ICommandModule)Activator.CreateInstance(AsmType); – 2010-10-07 21:52:49
是的,Grozz。我的接口都在MyApp.Interfaces中,而我的模塊位於MyApp.Modules名稱空間中。 – 2010-10-07 21:53:04