什么是友好型注射?

Dav*_*ang 27 dependency-injection angularjs

AngularJS文档中,解释了工厂,服务,值,常量和提供者之间的差异.

最后,我们有一个比较表: 比较表 其中一行是"类型友好注射".我无法理解它是什么.

那是什么意思?另外,这意味着,为了使一个值具有这种"类型友好注入",这是以"通过直接使用新运算符进行初始化"为代价的?

Pau*_*tte 11

在AngularJS中,您可以通过多种方式注入依赖项:

  • 在指令link函数中的位置
  • 在指令定义中按名称
  • 在控制器功能名称中
  • 在工厂功能名称
  • 在服务功能中按类型

类型友好注入允许您通过引用隐含地调用构造函数:

myApp.service('Pattern', ["Infinity", RegExp]);
Run Code Online (Sandbox Code Playgroud)

而不是明确使用new关键字:

myApp.factory('Pattern', 
 ["Infinity", function(Infinity) 
  {
  return new RegExp(Infinity);
  } 
 ]);
Run Code Online (Sandbox Code Playgroud)

要么

function goInfinity(Infinity)
  {
  return new RegExp(Infinity);
  } 

goInfinity.$inject = ["Infinity"];
myApp.factory('Pattern', goInfinity);
Run Code Online (Sandbox Code Playgroud)

Service配方生成一个服务,就像Value或Factory配方一样,但它通过使用new运算符调用构造函数来实现.构造函数可以使用零个或多个参数,这些参数表示此类型的实例所需的依赖项.

急切初始化意味着constant配方必须返回构造函数才能使用上述语法:

function RegExpConstant() 
  {
  return new RegExp(Infinity);
  } 

myApp.constant('Pattern', RegExpConstant)
Run Code Online (Sandbox Code Playgroud)

而不是返回函数,对象或文字值.

命名法来自Java:

服务是众所周知的一组接口.服务提供者是服务的特定实现.工厂是一个对象,它将对象引用返回给另一个对象

参考


Ana*_*and 9

我对"友好型注射"的解释:

工厂和提供程序分别注入工厂函数和$ get函数返回的任何内容,它们可以是任何类型,并且可能在运行时动态更改.而服务,常数和值注入是Angular知道的固定类型,因为它在配方定义期间已经明确定义.因此它们是类型友好的注射剂.


bha*_*tol 5

这里的类型是指:

  • 原语,
  • 对象文字,
  • 功能,或
  • 甚至是自定义类型的实例

工厂和供应商在服务,持续,价值方面最灵活,就其与注入器的绑定而言.因此,Angular可以检测绑定到Service,Constant,Value的对象/原语的类型因此更友好,因为我们知道类型的前期(设计/构建时间).