provider模式学习——simpledemo
2015-04-15 19:05
204 查看
1.首先建立一个类库项目:Provider Demo,添加如下类:并要添加引用System.Configuration
1.1 创建ParentProvider类继承自provider的基类:
namespace provider.Provider { public abstract class ParentProvider : ProviderBase { public abstract string ShowData(); } }
1.2 创建ParentProviderCollection类继承自ProviderCollection基类
namespace provider.Provider { /// <summary> /// 该类用于管理provider的集合 /// </summary> public class ParentProviderCollection : ProviderCollection { /// <summary> /// 获取指定名称的provider,从几何中获得名称为name的provider /// </summary> /// <param name="name"></param> /// <returns></returns> public new ParentProvider this[string name] { get { return (ParentProvider)base[name]; } } /// <summary> /// 重写基类中添加provider到集合的方法 /// </summary> /// <param name="provider"></param> public override void Add(ProviderBase provider) { if (provider == null) throw new ArgumentNullException("Provider"); if (!(provider is ParentProvider)) throw new ArgumentException("Invalid provider type", "provider"); base.Add(provider); } } }
1.3创建ParentProviderConfigurationSection类继承自ConfigurationSection
namespace provider.Provider { /// <summary> /// 这个类可以看成是一个管理配置文件中节点的类, /// 这个类中属性使用Attribute的方式声明值,具体里面的值可以通过反射得到 /// </summary> public class ParentProviderConfigurationSection : ConfigurationSection { /// <summary> /// 获取配置文件中配置节名称为Providers的信息 /// </summary> [ConfigurationProperty("providers")] public ProviderSettingsCollection Providers { get { return (ProviderSettingsCollection)base["providers"]; } } //[StringValidator(MinLength=1)] [ConfigurationProperty("defaultProvider")] public string DefaultProvider { get { return (string)base["defaultProvider"];} set { base["defaultProvider"]=value;} } } }
1.4创建ChineseProvider继承自ParentProvider
namespace provider.Provider { public class ChineseProvider:ParentProvider { public override string ShowData() { return "你好,欢迎来到中国"; } } }
1.5创建EnglishProvider继承自ParentProvider
namespace provider.Provider { public class EnglishProvider:ParentProvider { public override string ShowData() { return "hello ,welcome to china"; } } }
2.编译该类库项目生成程序集文件
3.新建c#窗体项目
3.1 添加providerDemo.dll的引用
3.2 添加引用System.Configuration
3.3 修改配置文件<configuration>
<configSections>
<section name ="parentProvider" type ="provider.Provider.ParentProviderConfigurationSection,providerDemo"/>
</configSections>
<parentProvider defaultProvider="ChineseProvider">
<providers>
<add name="ChineseProvider" type="provider.Provider.ChineseProvider"/>
<add name="EnglishProvider" type="provider.Provider.EnglishProvider"/>
</providers>
</parentProvider>
</configuration>
3.4 主窗体事件响应代码
public partial class Form1 : Form { private ParentProvider provider; private ParentProviderCollection providerCollection; public Form1() { InitializeComponent(); } private void btnC_Click(object sender, EventArgs e) { LoadProvider("ChineseProvider"); txtDisplay.Text = provider.ShowData(); } private void btnE_Click(object sender, EventArgs e) { LoadProvider("EnglishProvider"); txtDisplay.Text = provider.ShowData(); } private void Form1_Load(object sender, EventArgs e) { LoadProvider(null); txtDisplay.Text = provider.ShowData(); } private void LoadProvider(string providerSelected) { ParentProviderConfigurationSection config = null; config = (ParentProviderConfigurationSection)ConfigurationManager.GetSection("parentProvider"); providerCollection = new ParentProviderCollection(); ProviderHelper.InstantiateProviders(config.Providers, providerCollection, typeof(ParentProvider)); provider = providerCollection[providerSelected ?? config.DefaultProvider]; } }
4.运行结果展示
4.1 窗体加载:(使用默认的provider)
4.2 English按钮点击
4.3 Chinese按钮点击
相关文章推荐
- mojoPortal-provider模式学习之1.1 --IndexBuilderConfiguration
- 设计模式学习之简单工厂(Simple Factory,创建型模式)(1)
- 设计模式学习笔记--简单工厂模式(Simple Factory Pattern)【创建型模式】
- osgi实战学习之路:5.生命周期及利用命令、装饰者模式实现基于socket交互Bundle命令demo
- 设计模式学习总结-简单工厂模式(Simple Factory Pattern)
- 设计模式学习笔记三:简单工厂(Simple Factory)
- 【设计模式】学习笔记4:简单工厂模式(Simple Factory)
- 设计模式最简Demo:简单工厂模式[Simple Factory Pattern]
- ANdroid mvp 模式 优秀的学习demo
- 【项目架构】Android MVP 和MVVM框架模式 学习实例Demo之mvp篇
- 设计模式学习笔记一:Simple factory pattern,简单工厂模式
- osgi实战学习之路:5.生命周期及利用命令、装饰者模式实现基于socket交互Bundle命令demo
- Provider模式Demo
- 设计模式之代理模式学习demo
- dubbo学习--解析DemoProvider之dubbo容器启动(4)
- Service服务学习(SimpleRandomServiceDemo)
- 设计模式学习笔记——简单工厂(Simple Factory)
- 设计模式之工厂模式结合单例模式C++计算器代码DEMO(历史代码,贴出学习)
- 设计模式学习笔记三:简单工厂(Simple Factory)
- Esp8266学习之旅⑦ 了解softAP热点配网模式原理,仿“机智云”定义自己的热点配网模式协议。(带Demo)