首页 > 代码库 > Provider 模式
Provider 模式
Provider 模式的好处去除实现依赖。常见场景:DBPrider切换,第3方集成API切换
以发邮件为例:
Email Provider Config:
public abstract class EmailProvider : ProviderBase { #region Public Methods and Operators public abstract EmailResponse SendEmail(ApiSetting apiSetting, EmailContent content); #endregion }public sealed class EmailProviderCollection : ProviderCollection { #region Public Indexers public new EmailProvider this[string name] { get { return (EmailProvider) base[name]; } } #endregion } public sealed class EmailProviderConfiguration : ConfigurationSection { #region Public Properties /// <summary> /// Gets the default provider name. /// </summary> [ConfigurationProperty("default", DefaultValue = "http://www.mamicode.com/EDMProvider")] public string DefaultProviderName { get { return base["default"] as string; } } /// <summary> /// Gets the providers. /// </summary> [ConfigurationProperty("providers")] public ProviderSettingsCollection Providers { get { return (ProviderSettingsCollection) base["providers"]; } } #endregion } public static class EmailProviderManager { #region Static Fields private static readonly EmailProviderCollection Providers = new EmailProviderCollection(); #endregion #region Constructors and Destructors /// <summary> /// Initializes static members of the <see cref="EmailProviderConfiguration" /> class. /// </summary> static EmailProviderManager() { Initialize(); } #endregion #region Public Properties /// <summary> /// Gets the default. /// </summary> public static EmailProvider EmailProvider { get; private set; } #endregion #region Methods /// <summary> /// Reads the configuration related to the set of configured /// providers and sets the default and collection of providers and settings. /// </summary> private static void Initialize() { try { var section = (EmailProviderConfiguration) ConfigurationManager.GetSection("EmailProviders"); if (section == null) { throw new ConfigurationErrorsException("Email Provider Section is not set"); } ProvidersHelper.InstantiateProviders(section.Providers, Providers, typeof (EmailProvider)); if (Providers[section.DefaultProviderName] == null) { throw new ConfigurationErrorsException("Email provider is not set"); } EmailProvider = Providers[section.DefaultProviderName]; } catch (Exception ex) { Log.Debug(ex.Message, ex); } }
EDMProvider
public sealed class EDMProvider : EmailProvider { #region Public Methods and Operators public override EmailResponse SendEmail(ApiSetting apiSetting, EmailContent content) { 。。。。 }}
Configuration:
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> <configSections> <section name="EmailProviders" type="AAA.Mail.Configuration.EmailProviderConfiguration, AAA.Mail" /> </configSections> <EmailProviders default="EDMProvider"> <providers> <add name="EDMProvider" type="AAA.Mail.EDM.EDMProvider, AAA.Mail.EDM" /> </providers> </EmailProviders></configuration>
使用:
EmailProviderManager.EmailProvider .SendEmail (.....)
Provider 模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。