2012-08-01 79 views
1

我有一个C#控制台应用程序,并希望通过用户输入选择在控制台应用程序运行时加载和执行的特定dll库。那可能吗?加载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"); 
    }); 
} 

我如何可以加载其中的一个我的控制台应用程序的运行过程中,并调用它们,然后切换另一个?或者有更好的方法来处理这个问题吗?甚至可能来自Dll的不同方式?要求是每个代码都严格包含在它自己的dll中,而且这些dll不能事先被引用。如果这是不可行的,那么你能够建议一种方式,而不使用dll?谢谢

+0

见http://stackoverflow.com/questions/1087794/c-sharp-load-a-dll-file-and-access-methods-from-class-within – Liron 2012-08-01 15:30:38

回答

2

您可以使用反射动态加载未引用的程序集,从该程序集动态加载名为“CoreStrategy”的类,然后动态搜索该类以获取名为strategyQuoteBuffer的静态字段。然后,您可以使用反射来检索该字段,并将其投射到动作<列表<引用> >。

这样做的代码肯定不会很漂亮,但它是实现您想要的唯一方法。

+0

反射声音很慢,我错了吗?我需要一些真正有趣的东西,速度明智。 – 2012-08-01 15:44:56

+0

我的目标是能够加载一个“策略”,它提供了构建为方法的代码。我可以确保每个策略都提供完全相同的方法签名,只是方法内的代码不同。然后可以调用加载的方法。我看到应用程序完全可以实现,我怀疑它是建立在反思之上的。只是想知道你在做什么。 – 2012-08-01 15:47:58

+0

速度有多慢?更重要的是,速度有多慢?太慢了?反思并不以超快,真实而闻名,但这只是一个问题,如果它太慢*。直到你尝试它,你才会知道。其次,你试图从没有被引用的dll加载代码,而反射是唯一的方法。简而言之:尝试一下,如果它起作用,它会起作用,如果它太慢,你需要改变你的整个设计。 – Chris 2012-08-01 15:52:04