provider模式学习——simpledemo
来源:互联网 发布:应用架构 数据架构 编辑:程序博客网 时间:2024/05/16 02:45
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按钮点击
0 0
- provider模式学习——simpledemo
- simpleDemo
- Android学习——content provider
- angular学习(十五)——Provider
- chaincode:simpledemo
- jQuery simpleDemo
- jQuery simpleDemo
- Android学习笔记————Content Provider
- 【Android 学习】四大组件(三)——Content Provider
- android学习笔记3——content provider
- 【三层】问题 — provider:Named Pipes Provider,error:40
- udl文件—Provider问题
- iOS扩展—Document Provider
- iOS扩展—Document Provider
- iOS扩展—Document Provider
- .NET Provider模式
- 也说provider模式
- 设计模式--提供者模式provider
- Lotus-IBM中文地址
- Java为什么不支持泛型类型的数组
- Zookeeper笔记
- Paint概述
- 自定义异常类
- provider模式学习——simpledemo
- 火车进站
- void*的介绍
- PacMan开发-碰撞检测实现
- 别人技术面试总结(二)
- java 中如何处理大整数-java.BigInteger的使用
- vim 自动生成
- windows tomcat catalina.out 日志输出
- 阿里2015实习生笔试附加题第一个