Я читал различные статьи о IoC, DIP, DI и Locator, но я немного смущен, что связано с тем, что в некоторых статьях есть слишком неопределенные примеры, а некоторые другие статьи имеют только некоторые конкретные примеры без упоминания других случаев.Путаница о DI, IoC и локаторах сервисов
Не могли бы вы прояснить это для меня, глядя на приведенные ниже примеры и коротко объяснив, какие примеры соответствуют тому образцу?
вручную проходя интерфейс конструктора:
class Consumer { public Consumer(IStore store){...} } ... Consumer c = new Consumer(new ConcreteStore());
так же, как и в первом примере, но с помощью некоторых третьей стороной библиотеки (Unity, Виндзор, Ninject)
такой же, как первый пример, но с использованием класса BaseStore вместо интерфейса IStore
Пропускная зависимость от какой-либо другой метод, а не конструктор:
class Consumer { public BySomething(IStore store){...} } ... Consumer c = new Consumer(); c.BySomething(new ConcreteStore());
прохождение зависимости замаскированы внутри какой-либо другой интерфейс (бонус для этого решения - когда некоторые другие вещи, которые изобретены в «мире» и потребитель желает использовать их, мы не 't нужно изменить аргумент конструктора, но просто обновить IWorld; и мы можем полностью заменить весь мир с чем-то еще при тестировании):
interface IWorld { IDictionary<string,IStore> Stores { get; set; } IDictionary<string,ICityMap> Maps { get; set; } ... } class Consumer { public Consumer(IWorld world){...} public BySomething(string store, string city){...} } ... IWorld myWorld = new HeavenlyWorld(); ... // adding stores, maps and whatnot Consumer c = new Consumer(myWorld);
суб-вопрос: в данном случае, является IWorld локатор услуг или не совсем?
передавая функцию обратного вызова или делегата (.NET Действие в данном случае):
c.BySomething(store, city, new Action(() => {...}));
Я добавил этот случай, потому что в статье Inversion of Control гласит, что каждый обратный вызов IoC. Это правда?
Ваш вопрос: 'IWorld' является локатором сервисов? –
Это вопрос об одном конкретном случае. Наиболее важный вопрос: какая из этих точек совпадает с какими из шаблонов (DI, DIP, IoC, SL). – JustAMartin