Существует общий проект поиска служб , для которого команда Spring.Net предоставила реализацию. Их реализация IServiceLocator.GetAllInstances<TService>();
(аналог функции, которую вы ищете, IMO) использует:
/// <summary>
/// Resolves service instances by type.
/// </summary>
/// <param name="serviceType">Type of service requested.</param>
/// <returns>
/// Sequence of service instance objects matching the <paramref name="serviceType"/>.
/// </returns>
protected override IEnumerable<object> DoGetAllInstances(Type serviceType)
{
foreach( object o in _factory.GetObjectsOfType(serviceType).Values)
{
yield return o;
}
}
В этом фрагменте GetObjectsOfType(...)
точно такой же метод интерфейса, как и тот, который вы используете; хотя, возможно, обеспечивается другой конкретной реализацией, чем та, которую вы используете.
Итак, исходя из этого фона и предоставленной вами информации, я заключаю, что вы не «делаете это неправильно» , где «это» относится к использованию метода GetObjectsOfType(...)
для контекст весны, который вы используете.
Ваши предположения о том, что вы либо делаете это неправильно, либо контейнер Spring выполняет "очень медленно", на самом деле не являются взаимоисключающими IMO. На производительность могут повлиять многие другие факторы, например, точная конфигурация вашего контекста (например, имеем ли мы дело с синглетонами или прототипами, синглтоны с ленивой инициализацией, ...) и настройка вашего теста производительности.
Если вы все же решите, что производительность может быть улучшена для этого сценария, я уверен, что ребята из Spring хотели бы услышать от вас : -).