Javascript 角度DI:注入具有多个参数值的服务 介绍
我正在为一个Angular项目编写一些服务,如果我试图遵循良好的实践(比如可靠的原则)来避免耦合和依赖抽象的话 对于其中一个服务,我定义了以下接口:Javascript 角度DI:注入具有多个参数值的服务 介绍,javascript,angular,typescript,dependency-injection,frontend,Javascript,Angular,Typescript,Dependency Injection,Frontend,我正在为一个Angular项目编写一些服务,如果我试图遵循良好的实践(比如可靠的原则)来避免耦合和依赖抽象的话 对于其中一个服务,我定义了以下接口: 接口浏览器消息通道{ postMessage(message:T):无效; onMessage$():可观察; close():void; } 这个浏览器消息通道仅仅是一个抽象,它隐藏了实现细节,即拥有一个共享的消息空间,在不同的选项卡中打开的应用程序可以使用该空间彼此通信。此API还将使用可观察对象,以便客户端可以订阅新消息 实施 这项服务可以
接口浏览器消息通道{
postMessage(message:T):无效;
onMessage$():可观察;
close():void;
}
这个浏览器消息通道仅仅是一个抽象,它隐藏了实现细节,即拥有一个共享的消息空间,在不同的选项卡中打开的应用程序可以使用该空间彼此通信。此API还将使用可观察对象,以便客户端可以订阅新消息
实施
这项服务可以通过多种方式实现,但我决定利用下面的功能:
类BcBrowserMessageChannel实现BrowserMessageChannel{
私人信息:主题;
构造函数(专用广播频道:广播频道){
this.setUpOnMessage();
}
postMessage(message:T):无效{
this.broadcastChannel.postMessage(消息);
}
onMessage$():可观察{
返回此.onMessage;
}
close():void{
this.broadcastChannel.close();
this.onMessage.complete();
}
私有setUpOnMessage():void{
this.onMessage=新主题();
this.broadcastChannel.onmessage=({data}:{data:T})=>{
this.onMessage.next(数据);
};
}
}
只要需要浏览器消息频道
,我们就会在引擎盖下提供一个特定的实现:
@NgModule({
供应商:[{
提供:BrowserMessageChannel,
useClass:BcBrowserMessageChannel
}]
})
类通信模块{
}
角度框架内的问题
BroadcastChannel
对象必须传递到BcBrowserMessageChannel
的构造函数中,频道名称(字符串)也必须传递到BroadcastChannel
的构造函数中。在纯TypeScript代码中,如下所示:
const bc:BroadCastChannel=新的广播频道(channelName);
常量通道:BrowserMessageChannel=新的BcBrowserMessageChannel(bc);
如何在角度解中拟合这种情况
如何使用框架的依赖项注入机制来实现这一点,其中以下内容是不够的:
@组件({
...
})
类MyComponent{
构造函数(专用browserMessageChannel:browserMessageChannel){
//在我的场景中,我需要指定一个通道名来
//BrowserMessageChannel,所以在这个组件中我可以发布消息和
//订阅那个特定版本中的新版本
}
}