我有一个接口IExample
,以及一组类ClassOne
、ClassTwo
和ClassThree
,它们都在不同的命名空间中定义。在开发的后期,我可能会删除其中任意一个类,或在新的位置添加一个新类。
现在,我想在运行时查找所有实现了IExample
的类型并实例化它们。(我事先知道,实现IExample
的任何类都不需要任何构造函数参数,但我不知道如何在代码中指定,所以是我而不是编译器知道...)
这种做法可行吗?我该如何去做?
更新:我现在尝试了几种建议的方法,但在所有方法中,我都得到了一个System.MissingMethodException异常,因为我“无法创建接口实例”。这是我的代码:
var tasks = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(a => a.GetTypes())
.Where(t => typeof(IBootstrapperTask).IsAssignableFrom(t))
// This line is where it fails
.Select(t => Activator.CreateInstance(t) as IBootstrapperTask)
.ToArray();
new AutoMapperBootstrapper(tasks).Initialize();
如果没有as
子句,我看不到任何异常,但是我得到了一个object[]
,而我需要一个IBootstrapperTask[]
用于摘录中的最后一行的构造函数。我尝试了各种方法来进行转换,但是似乎都不起作用。