posts - 930,  comments - 588,  views - 402万
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8
     采用短信示例场景,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/


 

posted on   PetterLiu  阅读(889)  评论(0编辑  收藏  举报
编辑推荐:
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
阅读排行:
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
点击右上角即可分享
微信分享提示