2016-09-21 2 views
0

У меня есть консольное приложение, которое используется для импорта файлов из WS.C#: вызов метода из консольного приложения

Я действительно новичок в консольных приложениях, поэтому у меня есть вопрос.

Проект содержит класс под названием Importer.cs. Этот класс имеет метод Initialize():

class Importer 
{ 
    static void Initialize() 
    { 
     //here i connect to the server etc. 
    } 
} 

Теперь я хочу, чтобы быть в состоянии назвать мое приложение, как:

Importer.exe Initialize 

Так оно и должно вызвать метод Initialize, а затем я хотел бы быть в состоянии продолжать, например:

Importer.exe StartImport 

Я уже работаю с ARGS [] параметр, но я совсем застрял в настоящее время.

+0

Вы не можете этого сделать, но попробуйте использовать проект библиотеки классов и добавьте его вывод 'dll' в ссылки –

+0

Вам нужно научиться использовать Reflection, чтобы вы могли перевести строку типа« Инициализировать »в объект MethodInfo ,Это очень маловероятно, чтобы быть полезным упражнением, кроме как узнать, как использовать Reflection после того, как вы закончите. –

ответ

1

Используйте библиотеку, такую ​​как CommandLineParser, а затем используйте Reflection для вызова этих методов в качестве объектов MethodInfo.

+0

Я попробую это. выглядит интересно –

0

В вашем консольном приложении загляните в свой исследовательский раствор (в правом окне VS, где показаны все ваши файлы). Найдите тот, который называется PROGRAM.CS. Откройте его и посмотрите на это:

static void Main(string[] args) 
    { 

    } 

Внутри что поставить это:

static void Main(string[] args) 
    { 
     //This starts a new instance of the Importer Class 
     Importer myImporter = new Importer(); 
     //This calls the Initialize Method within Importer 
     Importer.Initialize(); 
     //This calls the StartInput() Method within Importer 
     Importer.StartInput();  
     //Use Console.ReadLine() as the last line in this method to keep your screen open after program execution ends. 
     Console.ReadLine();  
    } 

Первое консоль приложение работает модули Main() в консольном приложении.

Затем вы просто проверяете проект, используя F5. После тестирования создайте проект и запустите его, дважды щелкнув EXE-файл.

0

В зависимости от того, что вы делаете, это может даже не сработать. Я представляю ситуацию, где вы Initialize(), а затем StartImport(), но между этими двумя вызовами программа была закончена, и инициализированное состояние исчезло. Если у вас нет таких методов, как Initialize(), но скорее атомные подкоманды, ваш подход возможен в принципе.

Но возникает один вопрос: будет ли это общим? Я имею в виду: Скажем, вы добавляете другой метод. Затем вы хотите, чтобы доступ к методу с помощью подкоманды автоматически устанавливался или вы не могли бы добавить другой случай подкоманды? Первый вариант означает, что вам нужно устроиться с Reflection.

Теперь, скажем, вы добавляете методы, которые вы не можете объявить приватными по какой-либо причине, но вы не хотите, чтобы их отображали как подкоманду. Поэтому вам нужно будет следить за видимостью. Конечно, это будет означать плохой дизайн, но если вы застряли с устаревшими компонентами, это может произойти.

Теперь предположим, что вам нужны команды Initialize() (или подобные). Они заботятся о состоянии подключения или что-то еще, и программа должна все еще работать, когда вызывается следующая подкоманда, поэтому она может использовать инициализированную информацию, дескрипторы и т. Д. Не было бы тогда целесообразнее разрабатывать консольное приложение как оболочка? Итак, вы начнете с Importer.exe и получите запрос на подкоманды.

+1

Я почти уверен, что парень просто хочет знать, как запустить его методы класса в среде консольного приложения. Он думает, что ему нужно передать их в качестве командной строки args –

+0

Конечно, но я думаю, что он понял, что это не тривиально, и фактическая точка моего ответа такова, что такая команда после разработки команды может не работать для того, что он пытается сделать. –

+0

Аминь! Ура! –

Смежные вопросы