這很容易在舊的.NET中獲得所有可用的類型(例如某些接口),但我無法在新的CoreCLR中找到如何實現這一點的方式。在CoreCLR中獲取可用類型
我想要做的就是像GetRepository這樣的函數,它應該查找IRepository的現有實現並返回該類型的新實例。實施將位於不同的項目中。
所以,在.NET我可以使用這樣的事情:
AppDomain.CurrentDomain.GetAssemblies().SelectMany(a => a.GetTypes())
我有CoreCLR現在唯一的解決辦法是:
public T GetRepository<T>()
{
foreach (Type type in typeof(T).GetTypeInfo().Assembly.GetTypes())
if (typeof(T).IsAssignableFrom(type) && type.GetTypeInfo().IsClass)
return (T)Activator.CreateInstance(type);
return default(T);
}
但它只能如果接口和實現的位於同一個大會(這不是我的情況)。
謝謝!
能否請您在1號線(評論),什麼是coreCLR,我爲什麼需要它寫? (我知道mscorelib是什麼) –
對我來說,最重要的是能夠在任何平臺上(或者在雲中,甚至是自主託管的,沒有web服務器的情況下)運行web應用程序,以便將框架分離爲更新的小包獨立。我認爲這是一場小革命。你可以閱讀更多在asp.net網站。 –
'AppDomain.CurrentDomain.GetAssemblies()'似乎也在CoreCLR中:請參見[here](https://github.com/dotnet/coreclr/blob/cbf46fb0b6a0b209ed1caf4a680910b383e68cba/src/mscorlib/src/System/AppDomain.cs) – Christian