2016-09-21 14 views
0

私はコンソールアプリケーションを持っています。これはWSからのものをインポートするために使用されます。C#:コンソールアプリケーションからメソッドを呼び出す

私は本当にコンソールアプリには新しく、質問があります。

プロジェクトには、Importer.csというクラスが含まれています。このクラスは、()の初期化と呼ばれる方法があります。だから、Initializeメソッドを呼び出す必要があり、その後、私はしたいと思います

Importer.exe Initialize 

:今、私は次のように私のアプリを呼び出すことができるようにしたい

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

例えばと上行くことができる:

Importer.exe StartImport 

私はすでに引数[]パラメータで動作しますが、私は今、非常にこだわっています。

+0

あなたはそれを行うことはできませんが、クラスライブラリプロジェクトを使用し、その出力 'dll'を参照に追加しようとします –

+0

Reflectionの使い方を学ぶ必要があるので、" Initialize "のような文字列を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()の状況を想像しますが、これらの2つの呼び出しの間にプログラムが終了し、初期化された状態はなくなります。 Initialize()のようなメソッドではなく、原子サブコマンドの場合は、原則としてあなたのアプローチが可能です。

しかし、そこには1つの質問があります:これは一般的なものになりますか?つまり、別の方法を追加してください。自動的に確立されたサブコマンドによるメソッドへのアクセス権を持たせたいのですか、別のサブコマンドのケースを追加しても構いませんか?最初のオプションは、Reflectionで快適になる必要があることを意味します。

ここで、何らかの理由でプライベートに宣言できないメソッドを追加しますが、それらをサブコマンドとして公開しないようにしたいとします。だから、あなたは可視性を追跡する必要があります。確かに、これはデザインが悪いことを意味しますが、レガシーコンポーネントに悩まされている場合は、これが起こるかもしれません。

ここで、Initialize()(またはそれに類似した)コマンドが必要だとしましょう。彼らは、次のサブコマンドが呼び出されたときに、接続状態や何らかのプログラムを実行しておく必要があるので、初期化された情報やハンドルなどを使用することができます。コンソールアプリケーションの設計シェルのような?だから、Importer.exeで始まり、サブコマンドを求められます。

+1

私はかなり男がコンソールアプリケーション環境で彼のクラスメソッドを実行する方法を知りたいと確信しています。彼はコマンドライン引数としてそれらを渡す必要があると思っている –

+0

確かに、私は彼がその点を持っていると思う、これは些細なことではないと私の答えの実際のポイントは、コマンド設計後のそのようなコマンドは、やろうとしている。 –

+0

それにアーメン!乾杯! –

関連する問題