基于统一插件接口的WEB程序设计

类别:.NET开发 点击:0 评论:0 推荐:

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

本文地址:http://com.8s8s.com/it/it42408.htm