Unity 2.0 уточнения пожалуйста - PullRequest
1 голос
/ 26 августа 2011

Может кто-нибудь помочь мне понять, что такое Unity и как он упрощает кодирование, на примере ниже:

Нормальный код

FileLogger myLogger = new FileLogger();
FileLogger myLogger = new FastLogger();

UnityКод контейнера

// Create container and register types
IUnityContainer myContainer = new UnityContainer();
myContainer.RegisterType<ILogger, FileLogger>();       // default instance
myContainer.RegisterType<ILogger, FastFileLogger>("FastLogger");
ILogger myLogger = myContainer.Resolve<ILogger>();

Также:

  1. Что такое контейнер в Unity?
  2. Что такое разрешение?
  3. Что такое RegisterType.
  4. Что подразумевается под Type Mapping?
  5. Что такое IOC

И что происходит, если два класса реализуют один и тот же интерфейс, и мы делаем что-то подобное ниже для Unity:

container.RegisterType<IInvoicingService, InvoicingService>()
         .RegisterType<IInvoicingService, ManagerService>();
IInvoicingService service = container.Resolve<IInvoicingService>();
service.GetCount();

Похоже, он вызовет метод getCount для ManagerService.Что я должен сделать, чтобы вызвать GetCount на InvoicingService и ManagerService?

Да, я прочитал документацию по CodePlex, это меня очень смутило!

Ответы [ 2 ]

4 голосов
/ 26 августа 2011

Для IOC и / или инъекций зависимостей я могу порекомендовать следующее:

http://martinfowler.com/articles/injection.html

Это должно помочь вам лучше понять, чего можно достичь с помощью этих шаблонов.Unity помогает вам реализовать эти шаблоны в .NET.

Я постараюсь ответить на ваши вопросы с помощью моих знаний:

  • Ваш контейнер - это всего лишь контейнер.Он предназначен для хранения ваших сопоставлений.
  • «Разрешить» разрешает ваш интерфейс к конкретному экземпляру реализации этого конкретного интерфейса.Однако вы будете работать только с этим интерфейсом, что делает реализацию взаимозаменяемой (что является главной причиной для всего этого)
  • «RegisterType» обычно позволяет зарегистрировать конкретный класс для интерфейса.Таким образом, вы в основном говорите: «Это интерфейс, и если кто-то просит, чтобы этот интерфейс был разрешен, верните экземпляр этого конкретного класса».Как вы можете видеть, у вас может быть имя по умолчанию и имя сопоставления типов.
  • Отображение типов - это отображение между интерфейсом и реализацией.
0 голосов
/ 26 августа 2011

Вот ссылка на запись в блоге, которая описывает единство, и пример того, как его использовать в отношении аспектно-ориентированного программирования (AOP) и внедрения политики.Блог также содержит 3 замечательных ссылки на статьи MSDN от Dino Espisito.

http://bardevblog.wordpress.com/2011/03/21/aop-policy-injection-with-unity/

Надеюсь, что это

...