[英]C# polymorphism - load classes from DLL files
我对这个问题的回答已经解决了我在那个问题上遇到的问题,但是我想知道是否有可能延长它。 例如,如果我要让第三方为此系统提供命令,是否有办法将第一个答案扩展到我之前的问题,以允许它从文件夹中的所有DLL加载所有命令,然后列出它们在列表框中。
那可能吗? 是否可以使用ICommand列表(作为我之前提出的问题的答案)。
是。
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地狱之类的东西。
您可以在目录中加载每个程序集,遍历程序集中的每个公开的类,然后检查ICommand的实现。 然后,您可以通过创建这些对象的新实例将它们添加到内部系统。
一些错误检查的地方:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.