Это легко получить все доступные типы (например, для некоторого интерфейса) в старой .NET, но я не могу найти способ, как это сделать в новом 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);
}
Но он работает только в том случае, если интерфейс и реализация находятся в одной и той же сборке (и это не мой случай).
Спасибо!