An in-depth analysis of AngularJS dependency injection principles
This article mainly shares with you an in-depth analysis of the AngularJS dependency injection principle. It has a good reference value and I hope it will be helpful to everyone. Let’s follow the editor to have a look.
Dependency Injection: Dependency Injection AbbreviationDI
Example:
var xiaomi = new Xiaomi(); // 假设小米公司生产了一台xiaomi手机 createShipment(xiaomi); //此方法能把货送给顾客,这叫做把小米手机注入到createShipment()方法
Assume againcreateShipment When the () method requires three parameters (mobile phone, courier company, order details), it needs:
var xiaomi = new Xiaomi(); // 不仅要生产手机 var shipCompany = new ShipCompany(); // 还要自己建立个快递公司 var order = new Order(); // 还要自己建立线上线下平台做订单 createShipmentxiaomi,shipCompany,order); // 虽然小米已经这么干了,但还是很累的
In the above example, in addition to Xiaomi opening its own Is there no other way to sell it in the store? Not only do you have to make mobile phones, but you also have to take care of business and do express delivery. Aren’t you tired? In addition to doing it on its own, Xiaomi can also sell it on Taobao, JD.com, Suning and other platforms, and use express companies such as Santong Yishun to deliver goods. This is the problem that dependency injection needs to solve. Using Taobao, JD.com, SF Express and other companies is to inject sales service (sellService), express delivery service (sendService), etc. into Xiaomi!
Inversion of Control: Inversion of Control AbbreviationIOC
IOC refers to transferring the control of dependencies from the inside of the code to the inside of the code. For example, Xiaomi has given the power to sell and deliver mobile phones to the outside world. As for whether Taobao sells or JD.com sells, whether YTO delivers or SF Express delivers, Xiaomi does not need to worry about these. Xiaomi only needs to make mobile phones. Leave professional matters to professionals.
IOC is a loose coupling mode, and the means of implementation is dependency injection.
Injector:
constructor(private someService: SomeService) {...}
This sentence means that this component declares a someService attribute, indicating that its type is SomeService, and then angular will go to the provider to find SomeService# An instance of ##, and then inject this instance into someService.
提供器:
providers:[{provide:SomeService,useClass:SomeService}]
providers:[SomeService]//provide跟useClass相同可简写为这个
例:
app.module.ts
@NgModule({ providers:[{provide:SellService,useClass:ShunfengService}], // 这个是淘宝,用的顺丰 // providers: [{provide:SellService,useClass:YuantongService}] // 这个是京东,用的圆通}) product.component.ts @Component({ ... }) export class ProductComponent implements OnInit { product: Product; constructor(sellService: SellService) { this.product = this.sellService.sendProduct(); }}
上面的代码怎么理解呢?
小米声明sellService对象(也是属性),叫sellService去卖手机,sellService呼叫售卖服务,这个服务是SellService类型的(线上销售),那么angular就会去提供器里面找谁在提供这个售卖服务,至于是淘宝还是京东那要看提供器里面的,用的哪个快递公司就更加不需要小米公司来管了。angular找到SellService之后会new一个ShunfengService的一个实例(找一家顺丰门店),找到之后把服务注入给小米公司的sellService。sellService就跑到那家顺丰门店填送货单(sendProduct方法)把手机送给客户了。
各位看官应该能想出更好的比喻,欢迎交流。如果有不妥之处欢迎指正。
相关推荐:
30行代码让你理解angular依赖注入:angular 依赖注入原理
The above is the detailed content of An in-depth analysis of AngularJS dependency injection principles. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



This article will take you through dependency injection, introduce the problems that dependency injection solves and its native writing method, and talk about Angular's dependency injection framework. I hope it will be helpful to you!

Introduction to the method of using dependency injection (DependencyInjection) in the Phalcon framework: In modern software development, dependency injection (DependencyInjection) is a common design pattern aimed at improving the maintainability and testability of the code. As a fast and low-cost PHP framework, the Phalcon framework also supports the use of dependency injection to manage and organize application dependencies. This article will introduce you how to use the Phalcon framework

Javascript is a very unique language. It is unique in terms of the organization of the code, the programming paradigm of the code, and the object-oriented theory. The issue of whether Javascript is an object-oriented language that has been debated for a long time has obviously been There is an answer. However, even though Javascript has been dominant for twenty years, if you want to understand popular frameworks such as jQuery, Angularjs, and even React, just watch the "Black Horse Cloud Classroom JavaScript Advanced Framework Design Video Tutorial".

In Go, the dependency injection (DI) mode is implemented through function parameter passing, including value passing and pointer passing. In the DI pattern, dependencies are usually passed as pointers to improve decoupling, reduce lock contention, and support testability. By using pointers, the function is decoupled from the concrete implementation because it only depends on the interface type. Pointer passing also reduces the overhead of passing large objects, thereby reducing lock contention. Additionally, DI pattern makes it easy to write unit tests for functions using DI pattern since dependencies can be easily mocked.

For testing dependency injection using JUnit, the summary is as follows: Use mock objects to create dependencies: @Mock annotation can create mock objects of dependencies. Set test data: The @Before method runs before each test method and is used to set test data. Configure mock behavior: The Mockito.when() method configures the expected behavior of the mock object. Verify results: assertEquals() asserts to check whether the actual results match the expected values. Practical application: You can use a dependency injection framework (such as Spring Framework) to inject dependencies, and verify the correctness of the injection and the normal operation of the code through JUnit unit testing.

In today's information age, websites have become an important tool for people to obtain information and communicate. A responsive website can adapt to various devices and provide users with a high-quality experience, which has become a hot spot in modern website development. This article will introduce how to use PHP and AngularJS to build a responsive website to provide a high-quality user experience. Introduction to PHP PHP is an open source server-side programming language ideal for web development. PHP has many advantages, such as easy to learn, cross-platform, rich tool library, development efficiency

Answer: In Go language, dependency injection can be implemented through interfaces and structures. Define an interface that describes the behavior of dependencies. Create a structure that implements this interface. Inject dependencies through interfaces as parameters in functions. Allows easy replacement of dependencies in testing or different scenarios.

Answer: Dependency injection and service containers in PHP help to flexibly manage dependencies and improve code testability. Dependency injection: Pass dependencies through the container to avoid direct creation within the function, improving flexibility. Service container: stores dependency instances for easy access in the program, further enhancing loose coupling. Practical case: The sample application demonstrates the practical application of dependency injection and service containers, injecting dependencies into the controller, reflecting the advantages of loose coupling.
