由于前一阵子自学设计模式时看到了一些很不错的代码,但基于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();
}
}
}
}