Может кто-нибудь объяснит мне понятие контейнера Единства, как будто я 6-летний ребенок? Как это работает и что он делает?
WPF/Prism: Что такое контейнер UNITY?
Ответ 1
Это более техническое описание фона, надеюсь, вы по-прежнему считаете его полезным.
Как правило, это контейнер DI (инъекция зависимостей).
Учитывая следующий класс:
public class Sample
{
Service a;
public Sample()
{
a = new Service();
}
}
Проблема заключается в том, что он инициализирует собственную версию Service
, что очень затрудняет настройку изменений кода (т.е. если вы хотите обменять Service
на что-то другое). Также это затрудняет тестирование.
Чтобы решить эту проблему, на самом деле не создавайте ее самостоятельно, а получайте ее извне:
public class Sample
{
Service a;
public Sample(Service aService)
{
a = aService;
}
}
Теперь вы отделили создание от класса, который вы можете просто положить туда снаружи, увеличивая возможности тестирования и ремонтопригодности. Однако у вас все еще есть зависимость от класса Service
. Вы действительно не заинтересованы в этом конкретном классе, но в поведении, которое он предлагает, - поэтому вы создаете в нем интерфейс.
public class Sample
{
IService a;
public Sample(IService aService)
{
a = aService;
}
}
Теперь вы можете заменить службу на что угодно. Например, у вас есть класс, получающий данные с сервера с помощью службы. Теперь вы хотите протестировать только синтаксический анализ данных, а не службу сбора данных - просто создайте класс, реализующий интерфейс, выполнив статические данные!
Теперь Unity вступает в игру. На данный момент вы должны сами решать зависимости. То, что единство просто, - это все классы, которые имеют зависимости и решают их, поэтому вы можете просто позвонить (псевдокод, я не знаю единства):
UnityContainer uc = new UnityContainer();
var a = uc.GetService<IService>();
И он дает вам легко доступный класс.
Что мы добились от этого?
- код более удобен в обслуживании, потому что вы не полагаетесь на определенные типы
- код более проверяем
- приложение легко расширяется
Как резюме: это помогает быстрее создавать более быстрые приложения.
Ответ 2
Unity Container похож на кувшин, полный куки, когда вам нужен куки файл, который вы просто задаете банку, чтобы дать вам cookie.
У каждого cookie есть некоторые достоинства, как у вас может быть печенье, но вы не можете его есть, потому что его очень сложно есть (что-то вроде синглтона)
когда твоя мама создает новый куки файл, она просто кладет этот куки в банку, а не дает тебе прямо!
Ответ 3
Я рекомендую вам смотреть видеоролик Mike Taulty Prism
Первые две главы ответят на ваш вопрос, и вы можете посмотреть другие главы, чтобы узнать Призм (хотя его версия 2 и довольно старая, основные принципы остаются теми же...)
Удачи:)