Questo è facile per ottenere tutti i tipi disponibili (per alcune interfacce ad esempio) nel vecchio .NET, ma non riesco a trovare il modo in cui farlo nel nuovo CoreCLR.Ottenere i tipi disponibili in CoreCLR
Quello che voglio fare è avere una funzione come GetRepository, che dovrebbe cercare l'implementazione esistente di IRepository e restituire una nuova istanza di quel tipo. L'implementazione sarà collocata nel diverso progetto.
Così, in .NET posso usare qualcosa di simile:
AppDomain.CurrentDomain.GetAssemblies().SelectMany(a => a.GetTypes())
L'unica soluzione che ho per CoreCLR per ora è:
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);
}
ma funziona solo se l'interfaccia e l'implementazione sono situato nello stesso assembly (e questo non è il mio caso).
Grazie!
Può cortesemente scrivere a 1 riga (commenti), ciò che è CoreCLR e perché avrebbe bisogno? (So cosa è mscorelib) –
Per me la più importante è la possibilità di eseguire l'app Web su qualsiasi piattaforma (o in cloud, o anche self-hosted, senza server web), per avere framework separato per i piccoli pacchetti che vengono aggiornati indipendentemente. Penso che questa sia una piccola rivoluzione. Puoi leggere di più sul sito di asp.net. –
'AppDomain.CurrentDomain.GetAssemblies()' sembra essere anche in CoreCLR: vedere [qui] (https://github.com/dotnet/coreclr/blob/cbf46fb0b6a0b209ed1caf4a680910b383e68cba/src/mscorlib/src/System/AppDomain.cs) – Christian