我目前挖掘到DI在角2.我使用的是通用的亚型混凝土的数据类型是这样实现REST客户端外:角2进样依赖构造
class RESTClient<T>{
constructor() {
var inj = ReflectiveInjector.resolveAndCreate([HTTP_PROVIDERS]);
this.http = inj.get(Http);
this.conf = RESTConfiguration;
}
}
class BookClient extends RESTClient<Book>{
constructor(){
// since I dont want to inject the HTTP Providers here, I'm using a custom injector in the super class
super();
}
}
class WriterClient extends RESTClient<Writer>{
...
...
}
所以,按照我的理解,有将是由超类REST服务注入的所有RESTClient之间共享的一个http服务。
现在我想有一个RESTConfiguration类这样:
@Injectable()
export class RESTConfiguration {
get baseURL() {
return this._baseURL;
}
set baseURL(value) {
alert("sets value to"+value);
this._baseURL = value;
}
private _baseURL;
}
应该在主应用程序被配置为这样:
initializeApp(){
this.restconf.baseURL = "http://localhost:3004/";
}
bootstrap(MyApp, [RESTConfiguration]).then();
我现在想知道如何注入一个单我的RESTConfiguration实例放入RESTService类中,而不将它传递给我想保持无参数的构造函数,以减少代码重复并避免使用typescript中泛型的问题。
在上面的例子中(第一个代码片段)我试图使用我创建的ReflectiveInjector注入我的配置,它为我提供了一个自定义配置实例。
我想到了几个解决方案:
获取访问应用程序“全球喷油器”使用服务或一些静态类属性
实施额外的单逻辑为使一个可用的我配置
寻找在构造函数外部使用角度本地注入方法的方法?
在我的思维中是否存在错误或者我滥用了DI框架?
看起来像一个dup http://stackoverflow.com/questions/39038791/inheritance-and-dependency-injection/39038814?noredirect = 1#comment65548939_39038814 –
在阅读上面的链接问题之后,我非常感受作者 - 我倾向于使用他的“脏黑客”来通过全局注入器 - 我绝对不想在〜 20-30课。任何方式来解决这个问题?如何使用自定义注入器如上所示?然后,我可以直接将配置附加到我的服务中,或者只是将其设置为一个简单的静态类... – hakkurishian
这会创建一个独立的注入器。此自定义注入器不会返回任何模块中注册的提供者以及为这些提供者创建的实例。您可以按照链接问题的答案来做 - 将您的Angular2应用程序的注入器传递给周围,并从该注入器获取服务。 –