zoukankan      html  css  js  c++  java
  • 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);

            }

        }

    配置文件:

    xml

    调用代码:

      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/


     

  • 相关阅读:
    DateUtil-工具类
    文件上传到服务器
    删除文件以及文件夹
    Git命令<转载 https://www.cnblogs.com/cspku/articles/Git_cmds.html>
    httpd似乎没有在运行,并且正在代理补鞋匠,或者SELinux正在这样做。
    【转载】使用yum安装服务报错:[Errno 14] curl#6
    Cobbler自动化安装部署操作系统
    恢复或重置root密码(Centos7)
    DNS服务器
    Windows Server 2008安装教程
  • 原文地址:https://www.cnblogs.com/wintersun/p/1329861.html
Copyright © 2011-2022 走看看