Подтвердить что ты не робот

WPF/Prism: Что такое контейнер UNITY?

Может кто-нибудь объяснит мне понятие контейнера Единства, как будто я 6-летний ребенок? Как это работает и что он делает?

4b9b3361

Ответ 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 и довольно старая, основные принципы остаются теми же...)

Удачи:)