当前,我使用$inject
在控制器中注入组件:
export class MyClass{
public static $inject = [
"$depedencyA",
"$depedencyB",
"$depedencyC"
];
constructor(
private $depedencyA: IDependencyA,
private $depedencyB: IDependencyB,
private $depedencyC: IDependencyC
)
{
}
}
在创建MyClass
之类的let myClassInstance=new MyClass();
实例时,此方法很好用
但是,如果我想通过类本身不能直接注入的权限怎么办?
let myClassInstance=new MyClass(anotherDependency);
当然,我必须扩展MyClass
才能在构造函数中接受此参数
constructor(
private $depedencyA: IDependencyA,
private $depedencyB: IDependencyB,
private $depedencyC: IDependencyC,
private $anotherDependency: any
)
{
}
..但是由于参数数组不再匹配实际的构造签名,因此注入不再起作用。 我该如何解决?
答案 0 :(得分:0)
这将不起作用:let myClassInstance=new MyClass();
,因为您没有让angular为您捆绑依赖项。现在,您要负责提供该类中所有在您的示例中没有的依赖项。
如果您要自己更新这些对象,则添加其他依赖项时不会发生任何变化-您也必须手动提供此依赖项。
您真的无法使用angularjs的DI进行部分注入。您将需要自己重新创建该对象并提供所有依赖关系,或者必须将新的依赖关系注册为某种服务。