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");
    });
}

如何在控制台应用程序运行时加载其中一个并调用它们,然后将一个切换到另一个?还是有更好的方法来处理这个问题?甚至可能与 Dlls 不同的方式?要求是每一个的代码都严格包含在自己的dll中,并且不能事先引用dll。如果那不可行,那么您能否提出一种不使用 dll 的方法?谢谢

4

2 回答 2

2

您可以使用反射动态加载未引用的程序集,从该程序集中动态加载名为“CoreStrategy”的类,然后动态搜索该类以查找名为 strategyQuoteBuffer 的静态字段。然后您可以使用反射来检索该字段,并将其转换为 Action<List<Quote>>。

执行此操作的代码肯定不会很漂亮,但这是实现您想要的唯一方法。

于 2012-08-01T15:36:37.003 回答
2

如果反射很慢,那么您可能需要看一下fastflect

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

于 2012-08-01T15:54:00.273 回答