Вы можете помочь мне с теорией некоторых моделей. Я попытался их описать, я старался изо всех сил, но я думаю, что мои высказывания ошибочны, так что помогите)).Теория: «Сервисный локатор» «Контейнер IOC» «IOC» «DI»
1) «DI» и «IOC» - то же самое.
2) «МОК Контейнер» - это экземпляр объекта, который может разрешить зависимости, как:
void Test()
{
// create IOC Container to resolve
// dependences for SomeMethod method
var container = new SomeContainer();
container.For(typeof(IEmaleSender), typeof(SuperEmaleSender));
// Pass IOC Container to resolve dependences in SomeMethod
SomeMethod(container);
}
void SomeMethod(SomeContainer container)
{
IEmaleSender emailSender = container.Resolve(IEmaleSender);
emailSender.SendEmail();
}
3) «Service Locator» - это что-то вроде статический объект, который содержит Dictionary<Type, object>
где значение экземпляр типа ключа. И этот статический объект имеет 2 метода: Add
и Get
. Так что я могу добавить объект на старте моего приложения и запросить его везде:
void Test()
{
// Assign instanse of SuperEmaleSender to Locator
SuperEmaleSender emailSender = new SuperEmaleSender()
SomeLocator.Add(typeof(SuperEmaleSender), emailSender);
SomeMethod();
}
void SomeMethod()
{
SuperEmaleSender emailSender = SomeLocator.Get(typeof(SuperEmaleSender));
emailSender.SendEmail();
}
4) Это хорошая практика, чтобы объединить «Service Locator» и «Container МОК». Таким образом, вы можете создать экземпляр «контейнера IOC» при запуске приложения и запросить его через «Service Locator» со всего мира.
5) В ASP MVC5 уже включен «Сервисный локатор». Я говорю о DependencyResolver
.
Благодарим за помощь.
Так что «МОК Контейнер» - это всего лишь пример, а не статический объект, поэтому я должен вводить этот контейнер, чтобы везде в orede использовать его? –
Простите, что заметили этот комментарий через неделю, но так как я, наконец, заметил это, я подумал, может быть, я должен ответить. Контейнер IoC - это всего лишь экземпляр, но вы не должны вводить нигде. Вся цель контейнера IoC - это инъекции зависимостей, которые не вводятся повсеместно. –