C#polymorphism - 从DLL文件加载类

时间:2009-01-17 22:10:12

标签: c# oop dll

我得到的回复this question解决了我在那个问题上遇到的问题,但我想知道是否有可能延长它。例如,如果我要让第三方为此系统提供命令,是否有办法将第一个答案扩展到我之前的问题,以允许它从文件夹中的所有DLL加载所有命令,然后列出它们在列表框中。

这可能吗?是否可以使用ICommand列表(作为我之前提出的问题的答案)。

2 个答案:

答案 0 :(得分:5)

 Assembly commandAssembly = Assembly.Load("some/path")
 var commands = new List<ICommand>();

 foreach (Type type in commandAssembly.GetTypes())
 {
    if (type.GetInterface(typeof(ICommand).FullName) != null)
    {
       commands.Add((ICommand)Activator.CreateInstance(type));
    }
 }

但是,您可能会遇到有关装配加载的一些限制。你不能只从任何地方加载程序集,否则你可以重新实现COM DLL地狱之类的东西。

答案 1 :(得分:1)

您可以在目录中加载每个程序集,遍历程序集中的每个公开的类,然后检查ICommand的实现。然后,您可以通过创建这些对象的新实例将它们添加到内部系统中。

错误检查的一些地方:

  • 装配加载,确保它是CLR。
  • 构造:确保它不需要任何参数,并且它具有公共构造函数。
  • 构造:确保它不是抽象类。