假丶依賴注入

先在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();
        }
    }
}
相關文章
相關標籤/搜索