Я пытался создать модуль, похожий на командную строку.Каждый модуль может содержать несколько команд.Например, «Модуль 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
.