先在DAL添加多個共同的使用的接口:sql
namespace SQLserver_MySQL { public interface ISqlHelper { string add(); // 省略具體實現,如修改 刪除 查詢 } }
而後寫DAL真正的方法繼承上接口:函數
namespace DAL { public class DALOracleSqlHelper : ISqlHelper { public int addOracle(string str) { // 省略具體實現 return 1; } // 省略具體實現,如修改 刪除 查詢 public string add() { // 省略具體實現 return "Oracle"; } } }
namespace DAL { public class DALMsSqlHelper : ISqlHelper { public int addMsSql(string str) { // 省略具體實現 return 1; } public string add() { // 省略具體實現 return "MsSql"; } } }
開始寫BLL,利用構造函數來注入?不知道是否是這樣說:spa
namespace BLL { public class BLLAddStudent { ISqlHelper mssql = null; public BLLAddStudent(ISqlHelper sqlhelper) { mssql = sqlhelper; } public string addStudent() { return mssql.add(); } } }
到了咱們的控制器,我這用到反射,能夠隨時替換:code
namespace SQLserver_MySQL { class Program { static void Main(string[] args) { Assembly asse = Assembly.LoadFrom("DAL.dll"); ISqlHelper sql = (ISqlHelper)asse.CreateInstance("DAL.DALMsSqlHelper", true); sql = Assembly.Load("DAL").CreateInstance("DAL.DALMsSqlHelper") as ISqlHelper; ISqlHelper sqlhelper = new DALMsSqlHelper(); BLLAddStudent s = new BLLAddStudent(sqlhelper); Console.WriteLine(s.addStudent()); //ISqlHelper sqlhelper = new DALMsSqlHelper(); //BLLAddStudent bll = new BLLAddStudent(); //bll.sethelper(sqlhelper); ////BLLAddStudent s = new BLLAddStudent(sqlhelper); //Console.WriteLine(s.addStudent()); //Type dbHlperType = asse.GetType("DAL.DALOracleSqlHelper"); //object obj = asse.CreateInstance("DAL.DALOracleSqlHelper"); //執行帶參數的公共方法 //object ds = dbHlperType.GetMembers(); //object asd = dbHlperType.Name; //MethodInfo mt = dbHlperType.GetMethod("add");//加載方法 //Console.WriteLine(mt.Invoke(obj, null)); Console.ReadLine(); } } }