Первые шаги с Unity Application Block - Part 1

воскресенье, 21 марта 2010, Bobasoft

Unity application block - расширяемый dependency injection контейнер, который входит в Enterprise Library но также может работать и без нее. Общие сведения об этом принципе программирования, а также простенький пример можно найти здесь.

Первая из двух статей посвященных Unity Application Block. В них будет раскрыто как использовать конфигурационные файл + как описывать generic типы в них. В данной статье будет показан пример на основе обычного интерфейса и класса, как создать простенькую инверсию управления (IoC)

Для продолжения работы, Вам нужно будет установить Unity. (Ну а также иметь среду разработки и .Net 3.5)

Создаем консольное приложение (UnityAppBlock). Делаем ссылки на следующие сборки:

Microsoft.Practices.Unity
Microsoft.Practices.Unity.Configuration
System.Configuration;

А также добавляем к проекту файл App.config (Application Configutation File).

В нем сделаем такую вот заготовочку:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration" requirePermission="false"/>
  </configSections>
  <unity>
    <typeAliases>
    </typeAliases>
    <containers>
      <container>
        <types>
        </types>
      </container>
    </containers>
  </unity>
</configuration>

и начальный код:

    class Program
    {
        static void Main(string[] args)
        {
            IUnityContainer container = new UnityContainer();

            var section =
               (UnityConfigurationSection)ConfigurationManager.GetSection("unity");

            section.Containers.Default.Configure(container);
            Console.ReadLine();
        }
    }    

На этом этапе все должно компилится и выполнятся.
Дальше начинается самое интересное...))

Создаем интерфейс IMessenger и класс имплементирующий его:

    public interface IMessenger
    {
        string Message { get; }
    }
    
    public class Messenger : IMessenger
    {
        public string Message 
        {
            get { return "Just messenger"; }
        }
    }

а также добавляем несколько строк в конфигурационный файл:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration" requirePermission="false"/>
  </configSections>
  <unity>
    <typeAliases>
      <typeAlias alias="IMessenger" type="UnityAppBlock.IMessenger, UnityAppBlock"/>
      <typeAlias alias="Messenger" type="UnityAppBlock.Messenger, UnityAppBlock"/>
    </typeAliases>
    <containers>
      <container>
        <types>
          <type type="IMessenger" mapTo="Messenger"/>
        </types>
      </container>
    </containers>
  </unity>
</configuration>

и в функцию Main:

        static void Main(string[] args)
        {
            IUnityContainer container = new UnityContainer();

            var section =
               (UnityConfigurationSection)ConfigurationManager.GetSection("unity");

            section.Containers.Default.Configure(container);

            IMessenger messenger = container.Resolve<IMessenger>();
            Console.WriteLine(messenger.Message);

            Console.ReadLine();
        }

Запускаем, и ведем текст: "Just messenger".. ура... у нас вышло... unity прочитала из файла замапированный класс (Messenger) для интерфейса IMessenger (которые мы определили для метода Resolve) и создала для нас его экземпляр.

Чуть позже, я расскажу как использовать generic типы)))
З.Ы. файл с проектом приатачен к посту... (UnityAppBlock.rar)


WBR,
Bobasoft

Компании из статьи


Microsoft Украина


Сайт:
http://www.microsoft.com/ukr/ua/

Microsoft Украина Украинское подразделение компании Microsoft.

Ищите нас в интернетах!

Комментарии

Свежие вакансии