Rumah  >  Soal Jawab  >  teks badan

angular.js - 如何通俗易懂的解释“依赖注入”?

如何通俗易懂的解释“依赖注入”?另外,依赖注入和控制反转有区别吗?具体是什么区别?

ringa_leeringa_lee2737 hari yang lalu933

membalas semua(7)saya akan balas

  • 黄舟

    黄舟2017-05-15 17:06:27

    Perkara yang telah ditulis sedia untuk digunakan!

    balas
    0
  • 世界只因有你

    世界只因有你2017-05-15 17:06:27

    Pertama sekali, apakah pergantungan? Objek bergantung pada objek lain Sebagai contoh, var d=new Date(); pada atau tidak? tidak Untuk mencapai gandingan program yang rendah, adalah lebih baik untuk meminimumkan saling bergantung dan kekangan antara komponen Sebagai contoh, jika pembina telah dicipta oleh orang lain, saya boleh memanggilnya secara langsung tanpa menciptanya lagi.
    Ketiga, apakah itu suntikan? Ini bermakna objek yang saya gunakan sekarang diberikan oleh orang lain dan dicipta secara pasif. Contohnya

    angular.module('M1',['ng','ngRoute'])
    .controller('C1',function($scope,$http){
        $scope.data = 999;
        $http.get().success();    
    })
    这段代码运行时:只需要传入所需要的模块的名称,ng底层自动创建相关的对象,直接使用

    balas
    0
  • 阿神

    阿神2017-05-15 17:06:27

    Tiada beza cuma berbeza sudut, semuanya merujuk kepada perkara yang sama. Ringkasnya, anda tidak perlu mencipta objek sendiri, musim bunga akan membantu anda meletakkan objek di tempat yang anda perlukan

    balas
    0
  • 滿天的星座

    滿天的星座2017-05-15 17:06:27

    Ia hanyalah pemejalwapan model kilang.
    Prinsip suntikan kebergantungan dan penyongsangan kod kawalan adalah perkara yang sama, cuma pemahamannya berbeza.

    Istilah ini benar-benar terlalu maju Malah, ia tidak lebih daripada beberapa aplikasi berorientasikan objek asas, yang telah mengelirukan ramai rakan.
    Ini sama dengan Corak Strategi dan Corak Kilang.

    balas
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-15 17:06:27

    Anda boleh rujuk: http://www.nowcoder.com/questionTerminal/3be16186465a453f876729acd2e46ddf

    balas
    0
  • 我想大声告诉你

    我想大声告诉你2017-05-15 17:06:27

    Pada dasarnya tiada perbezaan antara suntikan pergantungan dan penyongsangan kawalan, tetapi perspektif untuk menerangkan masalah adalah berbeza.

    Penyongsangan kawalan:
    Apa sebenarnya takrifan Wikipedia ialah pemerolehan objek bergantung adalah songsang.
    Aplikasi biasanya terdiri daripada banyak objek. Banyak kelas lain perlu digunakan dalam satu kelas Pada mulanya, kami secara proaktif memperoleh contoh kelas lain melalui kata kunci baharu. Ini membawa masalah: perhubungan panggilan setiap kelas digandingkan.

    Dengan penyongsangan kawalan, kita hanya perlu secara pasif menunggu musim bunga menyuntik tika kelas ke dalam kita, dan kita boleh menggunakannya secara langsung.

    Ini mempunyai banyak faedah, seperti pengurusan objek berpusat, tidak perlu melaksanakan banyak singleton sendiri, memisahkan hubungan panggilan kelas, dsb.

    Andaikan terdapat dua kelas A dan B. Jika pernyataan seperti new B() digunakan dalam A, kemudian tambahkan tepi terarah dari B ke A. Projek yang lebih besar mungkin mempunyai beribu-ribu kelas, dan graf terarah yang dibentuk dengan cara ini pasti akan menjadi sangat kompleks. Jika penyongsangan kawalan digunakan, dalam kes yang paling ekstrem, semua kelas kami akan menjadi mata bebas.

    Oleh kerana ia mempunyai kawalan ke atas setiap kacang, ia juga boleh memperoleh pelbagai fungsi yang berkuasa.
    spring adalah berdasarkan IoC dan AOP.

    balas
    0
  • 迷茫

    迷茫2017-05-15 17:06:27

    Terdapat kelas pangkalan data db, yang mempunyai kaedah statik get_db() yang boleh mendapatkan objek sambungan pangkalan data.
    Terdapat juga jawatan kelas yang perlu mengendalikan pangkalan data, dan ia mempunyai kaedah get_post() yang perlu menanyakan pangkalan data.
    Oleh kerana sambungan pangkalan data ialah operasi awam, kelas pos tidak mahu menyambung ke pangkalan data sekali lagi secara dalaman untuk mengelakkan gandingan.
    Jadi kelas pos menyediakan kaedah set_db() untuk mendapatkan objek sambungan pangkalan data.
    db:: get_db() dihantar ke kelas pos sebagai parameter kaedah set_db() kelas pos Ini ialah suntikan kebergantungan.

    <?php
    class db {
        public static function get_db() {
            return new mysqli('127.0.0.1','user','pass','dbname',3306);
        }
    }
    class post {
        private $db;
        public function set_db($db){
            $this->db = $db;
        }
        public function get_post($id){
            return $this->db->query('SELECT * FROM post WHERE id ='.intval($id));
        }
    }
    $post = new post();
    $post->set_db( db::get_db() ); //注入post类依赖的数据库连接对象
    var_export( $post->get_post(1024) );

    Membandingkan kaedah penulisan di bawah, anda boleh memahami bahawa suntikan kebergantungan sebenarnya adalah tampung untuk sesetengah bahasa yang OOP sepenuhnya.

    <?php
    function db() {
        static $db;
        if ($db) {
            return $db;
        } else {
            $db = new mysqli('127.0.0.1','user','pass','dbname',3306);
            return $db;
        }
    }
    function get_post($id) {
        $db = db();
        return $db->query('SELECT * FROM post WHERE id ='.intval($id))->fetch_all();
    }

    balas
    0
  • Batalbalas