1

私は C# コンソール アプリケーションを持っており、ユーザー入力によって、コンソール アプリケーションの実行時に読み込まれて実行される特定の dll ライブラリを選択したいと考えています。それは可能ですか?

たとえば、次のように同じ静的クラスとアクション名を持つ 2 つの dll ライブラリがあるとします。

public static class CoreStrategy
{
    public static Action<List<Quote>> strategyQuoteBuffer = new Action<List<Quote>>(quoteList =>
    {
        Console.WriteLine("I am dll 1");
    });
}

public static class CoreStrategy
{
    public static Action<List<Quote>> strategyQuoteBuffer = new Action<List<Quote>>(quoteList =>
    {
        Console.WriteLine("I am dll 2");
    });
}

コンソール アプリの実行中にそれらの 1 つを読み込んで呼び出し、次に 1 つを別のものに切り替えるにはどうすればよいですか? または、これを処理するためのより良い方法はありますか? DLLとは異なる方法でしょうか?要件は、それぞれのコードが独自の dll 内に厳密に含まれていることだけであり、dll を事前に参照することはできません。それが不可能な場合は、dll を使用しない方法を提案できますか? ありがとう

4

2 に答える 2

2

リフレクションを使用して、参照されていないアセンブリを動的にロードし、そのアセンブリから「CoreStrategy」という名前のクラスを動的にロードしてから、そのクラスでstrategyQuoteBufferという名前の静的フィールドを動的に検索できます。次に、リフレクションを使用してそのフィールドを取得し、それをAction <List<Quote>>にキャストできます。

これを行うためのコードは確かにきれいではありませんが、それがあなたが望むものを達成する唯一の方法です。

于 2012-08-01T15:36:37.003 に答える
2

リフレクションが遅い場合は、fasterflectを調べる必要があるかもしれません。

http://www.codeproject.com/Articles/38840/Fasterflect-a-fast-and-simple-API-for-Reflection-i

于 2012-08-01T15:54:00.273 に答える