由于前一阵子自学设计模式时看到了一些很不错的代码,但基于JAVA的代码居多,后来在微软的网站上下载了一个C#写的采用插件更新的软件(具体链接记不得了,以后会贴上的).所以自已就动了用插件开发WEB站点程序的念头,但是在网上进行搜索后没有找到相关的文章,我就闭门写了一些,发表在这里,希望大家多多指教. 本文基本上的设计结构是插件模式,对于每一个数据库表,都有一个插件相对应,但对方便起见,真是将其写成.CS的文件格式,并在WEBCONFIG配置文件中加以声明,如下就是全局接口文件[请原谅我的术语并不标准], 文件名:IPlugStarClub.cs using System; using System.Data; using System.Data.OleDb;
namespace clubstar.IPlug { /// <summary> /// IPlugStarClub 的摘要说明。 /// </summary> public interface IPlugStarClub { string Name{get;} //所调用的PLUG的名字,如用户类或朋友类等 OleDbDataReader PerformSelect (IPlugSql sql); void PerformDelete (IPlugSql sql); void PerformInsert (IPlugSql sql); void PerformUpdate (IPlugSql sql); }
} 按接口的定义要求,下面是的IPlugSql文件 文件名:IPlugSql.cs using System;
namespace clubstar.IPlug { /// <summary> /// IPlugSql 的摘要说明。 /// </summary> public interface IPlugSql { string SqlString{get;set;} }
}
而如下的文件是在接口文件运行时的收集与操作类[我是这么认为]:[此处的代码就是前面所说的那个软件中的代码,我原版引用了 ] 文件名:PluginCollection.cs using System; using System.Collections;
namespace clubstar.IPlug { //This class was generated using CodeSmith (http://www.ericjsmith.net/codesmith/) /// <summary> /// Represents a collection of <see cref="IPlugin">IPlugin</see> objects. /// </summary> public class PluginCollection: CollectionBase { /// <summary> /// Initializes a new instance of the <see cref="PluginCollection">PluginCollection</see> class. /// </summary> public PluginCollection() { } /// <summary> /// Initializes a new instance of the <see cref="PluginCollection">PluginCollection</see> class containing the elements of the specified source collection. /// </summary> /// <param name="value">A <see cref="PluginCollection">PluginCollection</see> with which to initialize the collection.</param> public PluginCollection(PluginCollection value) { this.AddRange(value); } /// <summary> /// Initializes a new instance of the <see cref="PluginCollection">PluginCollection</see> class containing the specified array of <see cref="IPlugin">IPlugin</see> objects. /// </summary> /// <param name="value">An array of <see cref="IPlugin">IPlugin</see> objects with which to initialize the collection. </param> public PluginCollection(IPlugStarClub[] value) { this.AddRange(value); } /// <summary> /// Gets the <see cref="PluginCollection">PluginCollection</see> at the specified index in the collection. /// <para> /// In C#, this property is the indexer for the <see cref="PluginCollection">PluginCollection</see> class. /// </para> /// </summary> public IPlugStarClub this[int index] { get {return ((IPlugStarClub)(this.List[index]));} } public int Add(IPlugStarClub value) { return this.List.Add(value); } /// <summary> /// Copies the elements of the specified <see cref="IPlugin">IPlugin</see> array to the end of the collection. /// </summary> /// <param name="value">An array of type <see cref="IPlugin">IPlugin</see> containing the objects to add to the collection.</param> public void AddRange(IPlugStarClub[] value) { for (int i = 0; (i < value.Length); i = (i + 1)) { this.Add(value[i]); } } /// <summary> /// Adds the contents of another <see cref="PluginCollection">PluginCollection</see> to the end of the collection. /// </summary> /// <param name="value">A <see cref="PluginCollection">PluginCollection</see> containing the objects to add to the collection. </param> public void AddRange(PluginCollection value) { for (int i = 0; (i < value.Count); i = (i + 1)) { this.Add((IPlugStarClub)value.List[i]); } } /// <summary> /// Gets a value indicating whether the collection contains the specified <see cref="PluginCollection">PluginCollection</see>. /// </summary> /// <param name="value">The <see cref="PluginCollection">PluginCollection</see> to search for in the collection.</param> /// <returns><b>true</b> if the collection contains the specified object; otherwise, <b>false</b>.</returns> public bool Contains(IPlugStarClub value) { return this.List.Contains(value); } /// <summary> /// Copies the collection objects to a one-dimensional <see cref="T:System.Array">Array</see> instance beginning at the specified index. /// </summary> /// <param name="array">The one-dimensional <see cref="T:System.Array">Array</see> that is the destination of the values copied from the collection.</param> /// <param name="index">The index of the array at which to begin inserting.</param> public void CopyTo(IPlugStarClub[] array, int index) { this.List.CopyTo(array, index); } /// <summary> /// Creates a one-dimensional <see cref="T:System.Array">Array</see> instance containing the collection items. /// </summary> /// <returns>Array of type IPlugin</returns> public IPlugStarClub[] ToArray() { IPlugStarClub[] array = new IPlugStarClub[this.Count]; this.CopyTo(array, 0); return array; } /// <summary> /// Gets the index in the collection of the specified <see cref="PluginCollection">PluginCollection</see>, if it exists in the collection. /// </summary> /// <param name="value">The <see cref="PluginCollection">PluginCollection</see> to locate in the collection.</param> /// <returns>The index in the collection of the specified object, if found; otherwise, -1.</returns> public int IndexOf(IPlugStarClub value) { return this.List.IndexOf(value); } public void Insert(int index, IPlugStarClub value) { List.Insert(index, value); } public void Remove(IPlugStarClub value) { List.Remove(value); } /// <summary> /// Returns an enumerator that can iterate through the <see cref="PluginCollection">PluginCollection</see> instance. /// </summary> /// <returns>An <see cref="PluginCollectionEnumerator">PluginCollectionEnumerator</see> for the <see cref="PluginCollection">PluginCollection</see> instance.</returns> public new PluginCollectionEnumerator GetEnumerator() { return new PluginCollectionEnumerator(this); } /// <summary> /// Supports a simple iteration over a <see cref="PluginCollection">PluginCollection</see>. /// </summary> public class PluginCollectionEnumerator : IEnumerator { private IEnumerator _enumerator; private IEnumerable _temp; /// <summary> /// Initializes a new instance of the <see cref="PluginCollectionEnumerator">PluginCollectionEnumerator</see> class referencing the specified <see cref="PluginCollection">PluginCollection</see> object. /// </summary> /// <param name="mappings">The <see cref="PluginCollection">PluginCollection</see> to enumerate.</param> public PluginCollectionEnumerator(PluginCollection mappings) { _temp = ((IEnumerable)(mappings)); _enumerator = _temp.GetEnumerator(); } /// <summary> /// Gets the current element in the collection. /// </summary> public IPlugStarClub Current { get {return ((IPlugStarClub)(_enumerator.Current));} } object IEnumerator.Current { get {return _enumerator.Current;} } /// <summary> /// Advances the enumerator to the next element of the collection. /// </summary> /// <returns><b>true</b> if the enumerator was successfully advanced to the next element; <b>false</b> if the enumerator has passed the end of the collection.</returns> public bool MoveNext() { return _enumerator.MoveNext(); } bool IEnumerator.MoveNext() { return _enumerator.MoveNext(); } /// <summary> /// Sets the enumerator to its initial position, which is before the first element in the collection. /// </summary> public void Reset() { _enumerator.Reset(); } void IEnumerator.Reset() { _enumerator.Reset(); } } } }

|