我收到了关于这个问题的回答,解决了我之前遇到的问题,但我想知道是否可以扩展它。例如,如果有第三方向该系统贡献命令,是否有办法将第一个答案扩展到允许从文件夹中加载所有DLL中的所有命令,然后在列表框中列出它们。
这是否可能?它能够与ICommand列表一起工作吗(就像对我之前的问题提供的答案建议的那样)?
这是否可能?它能够与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 Hell 的东西。
您可以在目录中加载每个程序集,迭代每个程序集中公开的类,然后检查是否实现了您的ICommand。从那里,您可以通过创建这些对象的新实例将它们添加到内部系统中。
一些错误检查的地方: