zoukankan      html  css  js  c++  java
  • 假丶依赖注入

    先在DAL添加多个共同的使用的接口:

    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,利用构造函数来注入?不知道是不是这样说:

    namespace BLL
    {
        public class BLLAddStudent
        {
            ISqlHelper mssql = null;
            public BLLAddStudent(ISqlHelper sqlhelper)
            {
                mssql = sqlhelper;
            }
            
            public string addStudent()
            {
                return mssql.add();
            }
        }
    }

    到了我们的控制器,我这用到反射,可以随时替换:

    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();
            }
        }
    }
  • 相关阅读:
    【Web前端】用CSS3实现弹幕
    清除float影响
    用send_keys输入文本的方法
    使用装饰器实现测试跳过和预期故障的方法
    python的logging日志模块
    Ubutnu linux 下升级python版本,以2.x升级到3.x为例
    如何生成HTMLTestRunner报告
    用java和junit编写app自动化测试用例
    用python和unittest编写app自动化测试用例
    appium自动化测试等待的三种方法
  • 原文地址:https://www.cnblogs.com/ya-jun/p/11661342.html
Copyright © 2011-2022 走看看