Abstract Factory与Unity结合

     采用短信示例场景,SGIP,CMPP是联通与移动协议,对应它们有自己的配置文件。ISmsProvider为所有协议接口,IConfig
配置文件接口。通过在配置文件中配置工厂,在Unity中实现Client类构造函数自动注入。

    /// <summary>

    /// Interface for Factory

    /// </summary>

    /// <remarks>author Louis Liu http://wintersun.cnblogs.com </remarks>

    public interface IFactory

    {

        ISmsProvider CreateSms();

        IConfig CreateConfig();

    }

 

    public interface ISmsProvider

    {

        void ReadConfig(IConfig config);

    }

 

    public interface IConfig

    {

        string ConfigInfo();

    }

 

    public class SGIPFactory : IFactory

    { 

        public ISmsProvider CreateSms()

        {

            return new SGIP();

        }

        public IConfig CreateConfig()

        {

            return new SGIPConfig();

        }

    }

 

    public class SGIP : ISmsProvider

    {

       public void ReadConfig(IConfig config)

       {

           Console.WriteLine("SGIP readconfig with " + config.ConfigInfo());

       }

    }

 

    public class SGIPConfig : IConfig

    {

        public string ConfigInfo()

        {

            return "SGIPCONFIG";

        }

    }

 

    public class CMPPFactory : IFactory

    {

        public ISmsProvider CreateSms()

        {

            return new CMPP();

        }

        public IConfig CreateConfig()

        {

            return new SGIPConfig();

        }

    }

 

    public class CMPP : ISmsProvider

    {

        public void ReadConfig(IConfig config)

        {

            Console.WriteLine("CMPP readconfig with "+config.ConfigInfo());

        }

    }

 

    public class CMPPConfig : IConfig

    {

        public string ConfigInfo()

        {

            return "CMPPConfig";

        }

    }

 

    /// <summary>

    /// SmsPlatform

    /// </summary>

    /// <remarks>author Louis Liu http://wintersun.cnblogs.com </remarks>

    public class SmsPlatform

    {

        private ISmsProvider smsProvider;

        private IConfig config;

        private IFactory factory1,factory2;

 

        // Constructors auto inject

        public SmsPlatform(IFactory factory)

        {

            smsProvider = factory.CreateSms();

            config = factory.CreateConfig();

        }

 

        // Methods

        public void Run()

        {

            smsProvider.ReadConfig(config);

        }

    }

配置文件:

ContractedBlock.gif ExpandedBlockStart.gif xml
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  
<configSections>
    
<section name="unity"
         type
="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration" />
  
</configSections>
  
<unity>
    
<typeAliases>
      
<!-- Lifetime manager types -->
      
<typeAlias alias="singleton"
        type
="Microsoft.Practices.Unity.ContainerControlledLifetimeManager,    
          Microsoft.Practices.Unity"
 />
    
</typeAliases>
    
<containers>
      
<container>
        
<types>
          
<!-- Lifetime managers specified using the type aliases -->
          
<type type= "LibraryTest.Test.IFactory, LibraryTest"
              mapTo
="LibraryTest.Test.SGIPFactory, LibraryTest">
            
<lifetime type="singleton" />
          
</type>
          
<type type= "LibraryTest.Test.IFactory, LibraryTest" name="CMPP"
             mapTo
="LibraryTest.Test.CMPPFactory, LibraryTest">
            
<lifetime type="singleton" />
          
</type>
        
</types>
      
</container>
    
</containers>
  
</unity>
</configuration>

调用代码:

  private static void AnotherWays2()

        {

            IUnityContainer container = new UnityContainer();     

            UnityConfigurationSection section =

                (UnityConfigurationSection)ConfigurationManager.GetSection("unity");

            section.Containers.Default.Configure(container);    

            SmsPlatform smf = container.Resolve<SmsPlatform>();

            smf.Run();

            Console.ReadLine();

        }


http://wintersun.cnblogs.com/


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值