我有一個接口IExample
,以及一組類ClassOne
,ClassTwo
和ClassThree
,它們全部在不同的名稱空間中定義。我可能會刪除其中任何一個類,或者在一個新的地方添加一個新的類,在開發的後期階段。實例化實現特定接口的所有類
現在,我想找到在運行時實現IExample
的所有類型,並將它們實例化爲。 (我事先知道沒有實現IExample
的類將不需要任何構造函數參數,但我不知道如何在代碼中指定它,所以它是我 - 不是編譯器 - 知道...)
這是可能?我該如何去做呢?
更新:現在我已經試過幾個方法的建議,但對所有的人,行Activator.CreateInstance(type)
,我得到一個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[]
對在摘錄的最後一行的構造。我嘗試了各種方法來投射它,但似乎沒有任何工作。
更重要的是,它只包含已經被加載的組件。可能有其他的已被引用*但尚未加載。我個人更喜歡把它全部明確:) –