Thursday, November 19, 2009

Injection in Unity

Ниже показаны типы Injection в Unity.
Unity выполняет регистрацию соответствия типов и экземпляров объектов.
Кроме этого, он может самостоятельно выполнять создание этих объектов по запросу.
Unity основан на ObjectBuilder, более простом и, на данный момент, устаревшем контейнере.

Injection может быть трех типов:
  1. Construction injection
  2. Property injection
  3. Method call injection
см. рис. ниже.


  • Constructor injection. This type of injection occurs automatically. When you create an instance of an object using the Unity container, it will automatically detect the constructor with the largest number of parameters and execute this, generating instances of each object defined in the constructor parameters. It resolves each parameter type through the container, applying any registrations or mappings for that type. If you want to specify a particular constructor for Unity to use, you can add the InjectionConstructor attribute to that constructor in the target class.
  • Property (setter) injection. This type of injection is optional. You can add the Dependency attribute to any property declarations that you want Unity to resolve through the container. Unity will resolve that property type and set the value of the property to an instance of the resolved type.
  • Method call injection. This type of injection is also optional. You can add the InjectionMethod attribute to any method declarations where you want Unity to resolve the method parameters through the container. Unity will resolve each parameter type and set the value of that parameter to an instance of the resolved type, and then it will execute the method. Method call injection is useful if you need to execute some type of initialization method within the target object.


Конфигурацию типа Injection можно выполнить в файле конфигурации в разделе контейнера, либо читая конфигурацию на запуске, либо динамически ее создавая перед конфигурированием приложения во время выполнения и далее она читается при конфигурировании.
Если в конфигурации не указан тип, который нужно разрешить во время выполнения, тогда Unity просто выполняет инстанцирование этого объекта, просматривая его конструктор. Если конструктор имеет параметры, аналогично, делается попытка найти эти параметры в контейнере. Есть опасность возникновения циклических зависимостей, когда происходит injection двух типов, каждый из которых в качестве параметров конструктора указывает на второй объект.

Monday, November 16, 2009

Интересные статьи

N-gram and Fast Pattern Extraction Algorithm
Использование измененного LZW алгоритма,
построение N- грамматик для извлечения шаблонов текста из текста.
Символьное дифференцирование
Neural Networks on C#
Designing And Implementing A Neural Network Library For Handwriting Detection, Image Analysis etc.

Friday, November 13, 2009

MVP и Unity

Источник: http://gandjustas.blogspot.com/2009/06/mvp-unity.html

MVP – Model View Presenter – паттерн организации PL (presentation layer – уровень представления).

MVP применяется при создании десктопных интерфейсов. Выделяют три комопнента: есть модель – группа классов, которые отдают данные или получают команды, представление – форма обладающая состоянием и некоторым поведением. Презентер создают для отделения бизнес-логики от деталей GUI-фреймворка. В отличие от MVC в MVP представление определяет презентер, а не наоборот.

MVP обычно строится вокруг существующих GUI-фреймворков. На практике существуют две принципиально различные различные реализации паттерна – Supervising Controller и Passive View.
В первом случае логика помещается в обработчики событий button_click, а сами обработчики помещаются в отдельный класс. Для полной изоляции презентера от деталей представления надо писать достаточно много врапперов\адаптеров.
Во втором случае создается пара интерфейсов для общения между представлением и презентером. При совершении какого-либо действия представление напрямую обращается к презентеру, тот выполняет некоторый код и вызывает установку свойств представления. Passive View способствует максимальному перемещению кода в в презентер, что облегчает тестирование.

Реализация: Presenter содержит ссылки на View и сервис. Он использует сервисы, обновляет данные, отправляет команды во View. View содержит ссылку на Presenter. При обработке клика на кнопке он отправляет команды в Presenter.

Wednesday, November 4, 2009

Prism, Composite Application Guidance, CompositeWPF: общие положения

Monday, November 2, 2009

Unity Application Block



//TODO: У этого же пользователя есть интересные доклады на тему криптографии. Посмотреть.

//MVP + Unity - хороший пример использования, да и сам блог содержит много полезной информации.

Sunday, November 1, 2009

Aspect oriented programming

Нашел неплохие обучающие ресурсы по Aspect Oriented программированию.

http://www.codeproject.com/KB/cs/ps-custom-attributes-1.aspx
http://www.codeproject.com/KB/cs/ps-custom-attributes-2.aspx
habrahabr.ru/blogs/net/62232
http://www.postsharp.org

Powered by Blogger.