unity--IOC框架资料整理

今天在网上找了一些unity资料研究,出了好多问题,编译无法通过,经人指点总算成功编译运行,做个笔记,整理如下:

一、下载unity

二、在项目中添加Microsoft.Practices.Unity.dll和Microsoft.Practices.Unity.Configuration.dll的引用;

三、app.config如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration" />
  </configSections>
  <unity  xmlns="http://schemas.microsoft.com/practices/2010/unity">
    <alias alias="singleton" type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager,Microsoft.Practices.Unity"></alias>
    <alias alias="ISayHello2" type="TestUnity.ISayHello2,TestUnity"></alias>
    <alias alias="SayHello2Think" type="TestUnity.SayHello2Think,TestUnity"></alias>
    <alias alias="SayHello2ACloud" type="TestUnity.SayHello2ACloud,TestUnity"></alias>
    <alias alias="ISingletonDemo" type="TestUnity.ISingletonDemo,TestUnity"></alias>
    <alias alias="SingletonDemoImp1" type="TestUnity.SingletonDemoImp1,TestUnity"></alias>
    <container name="TestUnity">
      <register type="ISayHello2" mapTo="SayHello2Think" name="think"/>
      <register type="ISayHello2" mapTo="SayHello2ACloud" name="aCloud"/>
      <register type="ISingletonDemo" mapTo="SingletonDemoImp1" name="singletonDemoImp1">
      </register>
    </container>
  </unity>
</configuration>

  Unity的配置节的名称为”Unity",节处理程序的类型为 Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,它包含在程序集 Microsoft.Practices.Unity.Configuration 中;

      name:在注册此类型时使用的名称。此属性是可选的,如果不指定此属性,所在的 add 元素即为默认的类型映射。 

      type:容器中配置的源类型。如果这是映射注册,这就是映射的起始对象的类型;如果这是单件注册,这就是对象的类型。此属性是必须的。 

      mapTo:类型映射的目标类型。如果这是映射注册,这就是映射的目标对象的类型。此属性是可选的。 

       lifetime:设置用于给定的类型和名称的生命周期。是一个来自 LifetimeStyle 枚举的值。有效的值是 Transient(默认),它导致了容器每次都创建一个新的实例;以及Singleton,它使容器为每个请求返回同一实例。如果在配置一个单件时同时指定了type和mapto属性,SetSingleton 方法将返回指定在 mapTo 属性中的类型。如果mapTo属性没有指定值,SetSingleton 方法将返回指定在 type 属性中的类型。

四、新建一个项目,在里面加入如下几个文件:

ISayHello2.cs

     public   interface  ISayHello2
    {
         string  SayHello();
    }

 

SayHello2Think8848.cs

     public   class  SayHello2Think8848 : ISayHello2
    {
         #region  ISayHello2 成员

         public   string  SayHello()
        {
             return   " Hello think8848! " ;
        }

         #endregion
    }

 

SayHello2ACloud.cs

 
     public   class  SayHello2ACloud : ISayHello2
    {
         #region  ISayHello2 成员

         public   string  SayHello()
        {
             return   " Hello aCloud! " ;
        }

         #endregion
    }
 

 

ISingletonDemo.cs

     public   interface  ISingletonDemo
    {
        DateTime GetInitTime();
    }

 

SingletonDemoImpl.cs

     public   class  SingletonDemoImpl : ISingletonDemo
    {
         private  DateTime time;

         public  SingletonDemoImpl()
        {
             this .time  =  DateTime.Now;
        }

         #region  ISingletonDemo 成员

         public  DateTime GetInitTime()
        {
             return   this .time;
        }

         #endregion
    }

 

五、Main方法如下:

 static void Main()
  {
             UnityContainer myContainer=new UnityContainer();
            UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
            section.Configure(myContainer, "TestUnity");
         //   section.Containers["TestUnity"].Configure(myContainer);
            ISayHello2 sayHello2ACloud = myContainer.Resolve<ISayHello2>("aCloud");
            Console.WriteLine(sayHello2ACloud.sayHello());

}

  

转载于:https://www.cnblogs.com/dongyang/p/3310292.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值