接口是这样使用的,在“Global.cs”里根据WebConfig中的信息利用工厂模式,返回了这样一个接口,而在数据访问的“DataComponent.cs”数据访问组件,又利用这个接口,对数据库进行了访问。

疑问:这里的接口貌似只要一个传递的作用,传递了“ConnectionString”和“Database”。那么这样一个接口可不可以用一个“静态方法”,public static Iprovider来实现,而不定义为一个接口类型。或者是使用下面继承了接口的“Provider”类。根据这个例子,说说使用接口和直接实例化接口的好处是什么?它比直接使用“静态方法”或是“继承了接口的方法”相比有什么优势???

接口在使用时是这样的:
“Global.cs”里:
IProvider provider = null;
provider = ProviderFactory.CreateProvider(connectionString, "M_Common", "M_Common.Data.Separate.SqlServer");
ApplicationEnvironments.DefaultProvider = provider;
“ApplicationEnvironments.cs”里:
public static IProvider DefaultProvider
        {
            get
            {
                return _provider;
            }
            set
            {
                _provider = value;
            }
        }
“DataComponent.cs”里:
#region 所有原始方法
        IProvider _provider;

/// <summary>
/// 构造函数
/// </summary>
public DataComponent()
{
            _provider = ApplicationEnvironments.DefaultProvider;
} /// <summary>
/// 构造函数
/// </summary>
/// <param name="connection">提供连接类</param>
        public DataComponent(IProvider provider)
{
//从参数中取得
            _provider = provider;
}
接口代码如下:
using System;
using System.Collections.Generic;
using System.Text;using M_Common.Data.Separate;namespace M_Common.Data
{
    
    /// <summary>
    /// 数据访问驱动接口
    /// </summary>
    public interface IProvider
    {
        /// <summary>
        /// 数据库连接字符
        /// </summary>
        string ConnectionString
        {
            get;
            set;
        }        /// <summary>
        /// 数据库
        /// </summary>
        AbstractDatabase Database
        {
            get;
            set;
        }
    }    internal class Provider:IProvider
    {
        public Provider(string connectionString,AbstractDatabase database)
        {
            ConnectionString = connectionString;
            Database = database;
        }        #region Properties
        string _ConnectionString = "";
        public string ConnectionString
        {
            get
            {
                return _ConnectionString;
            }
            set
            {
                _ConnectionString = value;
            }
        }        AbstractDatabase _Database ;
        public AbstractDatabase Database
        {
            get
            {
                return _Database;
            }
            set
            {
                _Database = value;
            }
        }
        #endregion
    }
}