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

Абсолютно. Я был разработчиком Flex начиная с Flex 2, и до недавнего времени я использовал своего постоянного редактора, TextMate, для кодирования и Муравья для создания. TextMate имеет некоторые хорошие расширения для ActionScript и кодирование Flex, но я думаю, что Вы могли получить это для любого достойного редактора.

то, Что отсутствовало в моей установке, является применимым отладчиком, версия командной строки является болью для работы с. Из-за этого я начинал использовать FlexBuilder на стороне, с помощью него параллельно с моей регулярной установкой.

Наличие профилировщика не причиняет боль также.

28
задан foreyez 6 January 2011 в 05:32
поделиться

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>();

И он получит вам легко используемый класс .

Чего мы добились этим?

  • код более удобен в обслуживании, потому что вы не полагаетесь на конкретные типы
  • код более тестируем
  • приложение легко расширяется

Вкратце: оно помогает быстрее создавать лучшие приложения.

54
ответ дан 28 November 2019 в 02:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: