Provider Pattern for Beginners
来源:互联网 发布:淘宝分期付款买手机 编辑:程序博客网 时间:2024/05/23 02:24
http://www.codeproject.com/Articles/550495/Provider-Pattern-for-Beginners
Introduction
Provider pattern allows the developers to create pluggable components. It was first introduced in framework 2.0 and it has lot of features like “Membership Provider”, “Roles Provider” etc. and instantiates using configuration file.
This article provides guidelines to create logging component using provider pattern. The sample project contains twoproviders “TextLogProvider
” and “XmlLogProvider
” You can set one of them default in configuration file.
Base Data Provider Class
First of all you need to define abstract representation of all your methods. Create your data provider base class and your class must inherit from System.Configuration.Provider.ProviderBase base class.
public abstract class LogProviderBase : ProviderBase { . public abstract void WriteLog(LogType logType, string message); . }
As you see LogProviderBase
is an abstract class and it has abstract method WriteLog(..)
. In this example we have only one abstract method. But we can have more than one as per requirement.
Data Provider Class
After creating your base provider class, now you can create your concrete provider classes. In this sample I will create two providers for logging one for text and second for xml. Derive concrete provider class from LogProviderBase class and implement the abstract methods.
public class TextLogProvider : LogProviderBase { #region Data Members private string _filePath = ""; #endregion #region Overrided Methods public override void SetParameters(System.Collections.Specialized.NameValueCollection config) { _filePath = config["fileLocation"]; } public override void WriteLog(LogType logType, string message) { var dir = Path.GetDirectoryName(_filePath); if (!Directory.Exists(dir)) Directory.CreateDirectory(dir); using (var sw = new StreamWriter(_filePath, true)) { string s = string.Format("{0}, {1}, {2}", DateTime.Now, logType.ToString(), message); sw.WriteLine(s); } } #endregion }
Write the logging logic according to your provider type by implementing WriteLog(…)
. In TextLogProvider
class i am saving CVS line in text file.
Provider Collection & Configuration Section
For taking care of the provider configuration, you must write your own provider collection class derived fromSystem.Configuration.ProviderCollection
class. ProviderCollection
class exposes properties and methods to work with the list of various data providers declared in your configuration file.
public class LogProviderCollection : ProviderCollection { new public LogProviderBase this[string name] { get { return (LogProviderBase)base[name]; } } }
Provider pattern reads the concrete providers from the configuration file, for this purpose you need one more class which will read all the provider collections from the configuration file. Create ProviderConfiguration
class derived from the System.Configuration.ConfigurationSection
file.
public class LogProviderConfiguration : ConfigurationSection { [ConfigurationProperty("providers")] public ProviderSettingsCollection Providers { get { return (ProviderSettingsCollection)base["providers"]; } } [ConfigurationProperty("default", DefaultValue = "XmlProvider")] public string DefaultProviderName { get { return base["default"] as string; } } }
In this class you can add as many properties based on the different parameters that you need to extract from the configuration sections. All the properties must be decorated with the ConfigurationProperty
attribute.
Configuration
For configuring the provider model, we need to define our provider configuration section in <configsections>
. Here we can add a <section>
element with the name of the provider model configuration section element and the type of our data provider configuration class.
After configuring section (we configured LogProviders as section name). Now we need to add our all availableproviders in it and set one default provider from them.
<configSections> <section name="LogProviders" type="ProviderPatternLogTest.LogProvider.LogProviderConfiguration, ProviderPatternLogTest"/> </configSections> <LogProviders default="XmlProvider"> <providers> <add name="XmlProvider" type="ProviderPatternLogTest.LogProvider.Providers.XmlLogProvider, ProviderPatternLogTest" fileLocation="c:\temp\log.xml"/> <add name="TextProvider" type="ProviderPatternLogTest.LogProvider.Providers.TextLogProvider, ProviderPatternLogTest" fileLocation="c:\temp\log.txt"/> </providers> </LogProviders>
Use Provider Model in Code
It is very easy to use provider model in your code, simply get the default property of Provider Manager Class and then call your concrete methods
LogProviderManager.Default.WriteLog(logType, txtMessage.Text);
Get Other Information
You can also easily get other useful information of your concrete provider. Simply get ProviderSetting using LogProviderManager.
var setting = LogProviderManager.ProviderSettings[defaultName]; var setStr = GetSetting(setting); MessageBox.Show(setStr);
GetSetting(...)
method only parse all the parameters and returns concatenated string message.
private string GetSetting(ProviderSettings setting) { StringBuilder str = new StringBuilder(); str.AppendLine(string.Format("Default Provider name: {0}", setting.Name)); str.AppendLine(string.Format("Default Provider type: {0}", setting.Type)); str.AppendLine("------------------Parameters--------------------"); foreach (String s in setting.Parameters) { str.AppendLine(string.Format("Parameter: {0} -> {1}", s, setting.Parameters.Get(s))); } str.AppendLine("---------------------------------------"); str.AppendLine(""); return str.ToString(); }
- Provider Pattern for Beginners
- books for beginners in data mining and pattern recgonition
- Provider Pattern
- WinInet Tutorial for Beginners
- A* pathfinding for beginners
- JavaScript For Beginners
- JavaScript For Beginners
- javaServer pages for beginners
- A* Pathfinding for Beginners
- A* Pathfinding for Beginners
- HttpClient For Absolute Beginners
- A* Pathfinding for Beginners
- C# Tutorial For Beginners
- A* Pathfinding for Beginners
- RabbitMQ for Beginners
- GridView Events For Beginners
- Problems for Beginners
- OAuth for Beginners
- a^b^c%1000000007(高阶幂取模&&费马小定理)
- 黑马程序员——java之String以及常见对象
- socket 编程 TCP 实现简单聊天功能
- C可变参数列表
- Binary Indexed Trees
- Provider Pattern for Beginners
- ora 左外 右外连接
- Java:Unsupported major.minor version 51.0 (unable to load class
- 复习集合的文章
- 如何用Python写一个贪吃蛇AI
- Freemarker中如何遍历List
- ubuntu 下的搞笑
- View中如何进行手势识别
- seconds_behind_master解密