namespace ProviderDemo
{
// 定义保存购物车项目的约定
public abstract class CartProvider
{
public abstract void AddItem(int itemno);
}
}
namespace ProviderDemo
{
class DBCartProvider : CartProvider
{
public override void AddItem(int itemno)
{
// 保存到数据库中
// 取得数据库连接串
// sql 命令
// 执行 sql 命令
Console.WriteLine("DB Cart Provider: {0}", itemno);
}
}
}
namespace ProviderDemo
{
class FileCartProvider : CartProvider
{
// 子类中完成具体的实现
public override void AddItem(int itemno)
{
string filename = "cart.txt";
// 使用追加模式打开文件
System.IO.StreamWriter sw = new System.IO.StreamWriter(filename, true);
sw.WriteLine(itemno);
sw.Close();
}
namespace ProviderDemo
{
public class MyCartProvider
{
//静态构造函数不用修辞符,它只创建一次.
// 在静态构造函数中根据配置文件实例对象
static MyCartProvider()
{
// 读取实现类
string className = System.Configuration.ConfigurationManager.AppSettings["CartProvider"];
// 通过反射取得当前的程序集
System.Reflection.Assembly assembly = System.Reflection.Assembly.GetCallingAssembly();
// 通过类型创建对象实例
object o = assembly.CreateInstance(className);
// 此对象应该派生自 CartProvider
cp = o as CartProvider;
}
// 具体现实的引用
static CartProvider cp;
// 静态的方法必须使用静态的数据成员
public static void AddItem(int itemno)
{
cp.AddItem(itemno);
}
}
}
<configuration>
<appSettings>
<!-- 在配置文件中定义具体的实现类 -->
<add key="CartProvider" value="ProviderDemo.FileCartProvider"/>
</appSettings>
</configuration>
}
}