У нас есть большое решение (> 100 проектов ), и почти каждый тип использует либо локатор сервисов (, пример 1 ), либо наш собственный словарь типов (, пример 2 )для инстанцирования.
Например, у нас есть:
IQuote quote = Registry.Resolve<IQuote>();
или
IQuote quote = Registry.Find<IQuote>(args);
Второй пример отправляется в файл конфигурации, чтобы найти конкретный объект для создания экземпляра с использованием отражения.
Это усложняет жизнь при следовании коду -, потому что неясно, какой конкретный тип используется -, поэтому нам приходится много раз проверять сопоставления, когда мы пытаемся изучить часть кода. Используя приведенное выше в качестве примера, нажмите F12 на:quote.DoSomething()
приведет вас к определению интерфейса.
Это также немного сложнее реализовать -нам нужен интерфейс + конкретный класс + отображения конфигурации, когда альтернативой является только 1 класс.
Если подумать, -я не знаю, чтобы что-либо когда-либо было "заменено" на другой тип -, поэтому, хотя мы реализовали IoC, мы не использовали его, или по крайней мере -очень мало.
Так -оно того стоит? Мы реализовали это неправильно/слишком много? Я что-то неправильно понимаю?