Exemple #1
0
        static void Main(string[] args)
        {
            var sc = new ServiceCollection();

            sc.AddScoped(typeof(ITank), typeof(HeavyTank)); //**依赖注入**,只要将这里 HeavyTank 改成MediumTank
            sc.AddScoped(typeof(IVehicle), typeof(MediumTank));
            sc.AddScoped <Driver>();
            var sp = sc.BuildServiceProvider();
            //==========华丽的分割线===========//
            var driver = sp.GetService <Driver>();

            driver.Drive();

            ITank tank = sp.GetService <ITank>();

            tank.Fire();
            tank.Run();

            /*
             * ITank tank = new HeavyTank();
             * var t = tank.GetType();
             * object o = Activator.CreateInstance(t);
             * MethodInfo fireMi = t.GetMethod("Fire");        //反射
             * MethodInfo runMi = t.GetMethod("Run");
             * fireMi.Invoke(o, null);
             * runMi.Invoke(o, null);
             */

            /*
             * //var driver = new Driver(new HeavyTank()); //接口
             * //driver.Drive();
             */
            Console.WriteLine("Hello World!");
        }
Exemple #2
0
        public static void Main(string[] args)
        {
            //对于反射的学习
            ITank tank = new HeavyTank();
            //======华丽的分割线=======
            Type   t = tank.GetType();              //获得tank类对应的type
            Object o = Activator.CreateInstance(t); //从Type出发利用激活器来创建实例
            //从Type出发,获取某个类的方法的信息
            MethodInfo fireMi = t.GetMethod("Fire");
            MethodInfo RunMi  = t.GetMethod("Run");

            //将方法和实例绑定,调用方法
            fireMi.Invoke(o, null);
            RunMi.Invoke(o, null);
            Console.WriteLine();



            //依赖注入相关学习
            var sc = new ServiceCollection();//容器,ServiceCollection(用来装载“服务”,即各种接口,类型)

            sc.AddScoped(typeof(ITank), typeof(HeavyTank));

            var sp = sc.BuildServiceProvider();//ServiceProvider(用来提供“服务”)
            //===========华丽的分割线==========
            ITank tank1 = sp.GetService <ITank>();

            tank1.Fire();
            tank1.Run();
            Console.ReadLine();
        }
Exemple #3
0
        static void Main(string[] args)
        {
            //Console.WriteLine("Hello World!");
            var driver = new Driver(new HeavyTank());

            driver.Drive();
            int[]     nums1 = { 1, 2, 3, 4, 5 };
            ArrayList nums2 = new ArrayList {
                1, 2, 3, 4, 5
            };

            Console.WriteLine(Sum(nums1));
            Console.WriteLine(Sum(nums2));

            var roc = new ReadOnlyCollection(nums1);

            Console.WriteLine(Sum(roc));
            //foreach(var n in roc)
            //{
            //    Console.WriteLine(n);
            //}

            IKiller killer = new WarmKiller();

            killer.Kill();
            //var wk =killer as WarmKiller;
            var wk = (IGentleman)killer;

            wk.Love();

            ITank      tank   = new HeavyTank();
            var        t      = tank.GetType();
            object     o      = Activator.CreateInstance(t);
            MethodInfo fireMi = t.GetMethod("Fire");
            MethodInfo runMi  = t.GetMethod("Run");

            fireMi.Invoke(o, null);
            runMi.Invoke(o, null); //reflection



            var sc = new ServiceCollection();

            sc.AddScoped(typeof(ITank), typeof(HeavyTank));
            sc.AddScoped(typeof(IVehicle), typeof(LightTank));
            sc.AddScoped <Driver>();
            var sp      = sc.BuildServiceProvider();
            var driver1 = sp.GetService <Driver>();

            driver1.Drive();

            ITank tank1 = sp.GetService <ITank>();

            tank1.Fire();
            tank1.Run();
        }
Exemple #4
0
        static void Main(string[] args)
        {
            var sc = new ServiceCollection();

            sc.AddScoped(typeof(ITank), typeof(MiddleTank));
            sc.AddScoped(typeof(IVehicle), typeof(LightTank));
            sc.AddScoped <Driver>();
            var sp = sc.BuildServiceProvider();
            //=====================================
            ITank tank = sp.GetService <ITank>();

            tank.Fire();
            tank.Run();

            var driver = sp.GetService <Driver>();

            driver.Run();
        }
        static void Main(string[] args)
        {
            var serviceCollection = new ServiceCollection();

            //ITank是静态类型,typeof后才能拿到动态的类型描述
            //AddScoped方法有多种重载,这里调用的是第一个参数为一个类型,第二个参数为谁实现了这个类型
            serviceCollection.AddScoped(typeof(ITank), typeof(HeavyTank));
            serviceCollection.AddScoped(typeof(IVehicle), typeof(Car));
            serviceCollection.AddScoped <Driver>();
            var serviceProvider = serviceCollection.BuildServiceProvider();
            //-------------------以上为注册-------------------------------
            ITank tank = serviceProvider.GetService <ITank>();

            tank.Fire();
            tank.run();
            //--------------------------------------------------------------
            Driver driver = serviceProvider.GetService <Driver>();

            driver.Drive();
        }
Exemple #6
0
        static void Main(string[] args)
        {
            //    ======演示最基本的反射=====
            //    ITank tank = new HeavytTank();

            //    Type t = tank.GetType();
            //    object o = Activator.CreateInstance(t);
            //    MethodInfo fireMI = t.GetMethod("Fire");
            //    MethodInfo runMI = t.GetMethod("Run");

            //    fireMI.Invoke(o, null);
            //    runMI.Invoke(o, null);
            //    ======反射的演示结束=======

            // ======演示依赖注入dependency injection(DI)=====
            //  容器注册
            ServiceCollection sc = new ServiceCollection();

            sc.AddScoped(typeof(ITank), typeof(HeavytTank));
            sc.AddScoped(typeof(IVehicle), typeof(Car));
            sc.AddScoped <Driver>();
            ServiceProvider sp = sc.BuildServiceProvider();


            // =============注册好了,之后可以使用配置好的容器了================
            // 之后每次要的ITank利用的都是HeavyTank实例。
            // 如果以后逻辑修改,比如ITank都要用MediumTank实现,直接改注册的地方就可以了。
            // 假设没有使用这种容器的方法,而是每次都ITank tank= new HeavyTank();程序中使用了n次都要每次去修改
            ITank tank = sp.GetService <ITank>();

            tank.Fire();
            tank.Run();

            var driver = sp.GetService <Driver>();// Driver初始化需要IVehicle。容器会自动按已经注册的IVehicle的实例放进去生成Driver的实例

            driver.Run();

            Console.ReadKey();
        }
Exemple #7
0
        static void Main(string[] args)
        {
            var sc = new ServiceCollection();

            //One of the advantages of "dependency injection" is that we can easily substitute "HeavyTank" to "MediumTank" as the implementation class for "ITank"
            //when we've created a lot of "HeavyTank" in the program. If we use "new" to create instances, we need to change them one by one.
            sc.AddScoped(typeof(ITank), typeof(HeavyTank));
            var sp = sc.BuildServiceProvider();
            //.................................
            ITank tank = sp.GetService <ITank>();

            tank.Run();
            tank.Fire();

            //This is another example. To create an instance for "Driver", we once need to create the instance for "IVehicle" first.
            //With the help of dependency injection, we just need to do "AddScoped()" and "GetService()".
            sc.AddScoped(typeof(IVehicle), typeof(LightTank));
            sc.AddScoped <Driver>();
            sp = sc.BuildServiceProvider();
            var driver = sp.GetService <Driver>();

            driver.Drive();
        }