Первые шаги с Unity Application Block - Part 1
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 Украина | Украинское подразделение компании Microsoft. |