Unity Application Block Hands-on Lab for Ent

系统 1787 0

实验估计时间:25mins

 

介绍

在实验中,你将会学习通过程序配置文件去创建一个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>
      

类似于上个实验调用API,运行程序……

Unity Application Block Hands-on Lab for Enter-Lib 5.0:Lab 3-Using a Configuration File[Translation]


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论