/// <summary> /// Создаем класс реализущий работу подкоманды. /// </summary> /// <param name="result">класс реализущий работу подкоманды.</param> /// <returns>true - класс реализущий работу подкоманды создан.</returns> public bool CreateInstance(out ICommandLineRun result) { bool rc = false; result = null; try { string classNameCmd = string.Empty; if (string.IsNullOrEmpty(this.NameClassRun)) {//строим имя исполняющего команду класса вместе с именем пространства и суффикс // суффикс = constSufficsClass = "CommandLine" // Для команды с имененем нelp - класс нelpCommandLine: // Для команды с имененем parse - класс parseCommandLine: // именя пространства NameClassRun и CommandLineSample совпадают classNameCmd += this.GetType().Namespace + '.' + this.CommandName + constSufficsClass; } else // { classNameCmd = this.NameClassRun; } Type typeclass = Type.GetType(classNameCmd); // Определяем, может ли экземпляр указанного типа быть назначен // переменной типа ICommandLineRun if (typeclass != null && typeof(ICommandLineRun).IsAssignableFrom(typeclass)) { // - typeclass является производным от ICommandLineRun. // разрешим и загрузим библиотеку if (!string.IsNullOrEmpty(AssemblyNameWithPath)) // есть библиотека для загрузки { this.pluginAssembly = CommandLineService.LoadPlugin(this.AssemblyNameWithPath); } // создадим экземпляр: result = (ICommandLineRun)Activator.CreateInstance(typeclass); this.commandClass = result; result.CommandName = this.CommandName; // имена совпадают.НУ пока так. rc = true; } } catch (System.ArgumentException exc1) { // Параметр type не является объектом типа RuntimeType. -или- Значение параметра // type является открытым универсальным типом (иными словами, свойство } catch (System.NotSupportedException exc2) {// Тип, заданный параметром type, не может быть System.Reflection.Emit.TypeBuilder. // -или- Создание типов System.TypedReference, System.ArgIterator, System.Void // и System.RuntimeArgumentHandle или массивов этих типов не поддерживается. // -или- Сборка, содержащая тип type, является динамической сборкой, созданной // с помощью System.Reflection.Emit.AssemblyBuilderAccess.Save. } catch (System.Reflection.TargetInvocationException exc3) { // Вызываемый конструктор создает исключение. } catch (System.MethodAccessException exc4) {// Вызывающий код не имеет разрешения на вызов этого конструктора. } catch (System.MemberAccessException exc5) { // Не удается создать экземпляр абстрактного класса, или этот член был вызван // при помощи механизма поздней привязки. } catch (System.Runtime.InteropServices.InvalidComObjectException exc6) { // COM-тип не был получен посредством Overload:System.Type.GetTypeFromCLSID // или Overload:System.Type.GetTypeFromProgID. } catch (System.Runtime.InteropServices.COMException exc8) { // Параметр type представляет COM-объект, но идентификатор класса, используемый // для получения типа, является недопустимым, или идентифицируемый класс не // зарегистрирован. } return(rc); }