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/


 

你可能感兴趣的:(abstract)