采用短信示例场景,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);

        }

    }

配置文件:


  <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/


 

相关文章:

  • 2022-12-23
  • 2021-12-14
  • 2021-09-20
  • 2021-11-12
  • 2022-01-20
  • 2021-10-27
猜你喜欢
  • 2022-12-23
  • 2021-07-05
  • 2021-10-15
相关资源
相似解决方案