Unity Application Block 配置文件

来源:互联网 发布:如何用淘宝联盟返利 编辑:程序博客网 时间:2024/04/28 22:02

首先 ,不一定要配置文件才能初始化这个ioc框架 ,写代码反而更好,有代码提示,有语法检查,有debug

十分不耻java动则需要先学配置文件再学的框架,因为java没debug嘛,体谅java

然后你也就可以通过以下进行框架的配置

介绍

在实验中,你将会学习通过程序配置文件去创建一个Unity Container。使用配置文件有些类似于上篇实验中的调用配置API。实际上,配置文件方式可以看成脚本调用API。

先在这里下载实验代码。

 

任务1:使用配置文件保存Container的配置信息

在这次任务中,主要是用配置文件替换Container的创建代码。

添加引用的有:Microsoft.Practices.Unity.Configuration和System.Configuration。

打开Program.cs文件,添加代码 using Microsoft.Practices.Unity.Configuration。将container的一堆RegisterType方法用LoadConfiguration方法替换。如下:

 

using (IUnityContainer container = new UnityContainer())

{

    // TODO replace with application of configuration information here

    //container

    //    .RegisterType<IStocksTickerView, StocksTickerForm>()

    //    .RegisterType<IStockQuoteService, MoneyCentralStockQuoteService>(

    //        new InjectionProperty("Logger"))

    //    .RegisterType<ILogger, ConsoleLogger>()

    //    .RegisterType<ILogger, TraceSourceLogger>(

    //        "UI",

    //        new ContainerControlledLifetimeManager(),

    //        new InjectionConstructor("UI"))

    //    .RegisterType<StocksTickerPresenter>(

    //        new InjectionProperty(

    //            "Logger",

    //            new ResolvedParameter<ILogger>("UI")));

 

    container.LoadConfiguration();

 

    StocksTickerPresenter presenter

        = container.Resolve<StocksTickerPresenter>();

 

    Application.Run((Form)presenter.View);

}

 

 

LoadConfiguration扩展方法是最简单方便的方式配置container。该方法从程序配置文件里检索相关的配置文件信息,而不是执行程序的配置文件。

更多信息关于container加载配置的内容请看Unity2.0文档中的"Loading Configuration File Information into a Container"http://msdn.microsoft.com/en-us/library/ff660935(v=PandP.20).aspx#load_config

创建配置文件

下面主要使用到了一些Unity的配置元素,Unity配置元素的更多内容看Unity2.0文档中的"The Unity Configuration Schema"http://msdn.microsoft.com/en-us/library/ff660914(v=PandP.20).aspx

打开App.config文件;

添加unity配置区域的声明:

 

<section name="unity" 
     type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, 
     Microsoft.Practices.Unity.Configuration, Version=2.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
</section>

 

unity这个name只是一个配置域的约定,任何名字都有效。

添加一个untiy的元素:

 

<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
  
</unity>
configuration>

 

这个元素名字必须与注册unity configSections一致。

该untiy标签中的xmlns不是配置运行时必须的。假如你在unity标签中使用了该xmlns,Visual Studio XML editor加载了Unity Configuration XSD文件,editor会自动提示标签,给你配置unity带来方便。

增加一个alias标签。

 

<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
  <alias alias="TraceSource" 
         type="System.Diagnostics.TraceSource, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
</unity>

 

类型的别名不是必须的。类型的别名、assembly和namespace标签的作用都是减少配置文件的代码量,并便于阅读。.NET中已经有一些别名了,像int、string和singleton。

下面定义assembly和namespace:

 

<assembly name="StockTicker"/>
<namespace name="StockTicker.Loggers"/>
<namespace name="StockTicker.StockQuoteServices"/>
<namespace name="StockTicker.UI"/>
</unity>

 

添加一个container标签。

 

<namespace name="StockTicker.UI"/>
 
<container></container>

 

这是一个name为缺省值的container,被不带name的LoadConfiguration方法调用。

在container中添加一个register标签,将IStockTickerView接口与StocksTickerForm建立映射。

下面添加注册信息:

<container>

  <register type="IStocksTickerView" mapTo="StocksTickerForm"/>

  <register type="IStockQuoteService" mapTo="RandomStockQuoteService">

    <property name="Logger"></property>

  </register>

  <register type="ILogger" mapTo="ConsoleLogger"/>

  <register name="UI" type="ILogger" mapTo="TraceSourceLogger">

    <lifetime type="singleton"/>

    <constructor>

      <param name="traceSourceName" value="UI"/>

    </constructor>

  </register>

  <register type="StocksTickerPresenter">

    <property name="Logger">

      <dependency name="UI"/>

    </property>

  </register>

</container>

 

原创粉丝点击