Предположим, у нас есть следующие сервисы:
interface IService { }
interface IService<T> : IService {
T Get();
}
В ASP.Net-Core, после того, как мы зарегистрировали несколько реализаций с разными T
, мы можем получить все зарегистрированные сервисы, такие как:
IEnumerable<IService> services = serviceProvider.GetServices<IService>();
Теперь, потому что мне нужен доступ к параметру универсального типа из другого интерфейса, который не является опцией. Как я могу получить все реализации IService<T>
без потери универсального типа? Что-то вроде:
IEnumerable<IService<T>> services = serviceProvider.GetServices<IService<T>>();
foreach (var s in services) {
Method(s);
}
// Here we have a generic method I don't have control over.
// I want to call the method for each `T` registered in DI
void Method<T>(IService<T> service) {
Type t = typeof(T); // This here will resolve to the actual type, different in each call. Not object or whatever less derived.
}
И все это должно иметь несколько приличную производительность.