Dependency injection 使用依赖项注入时,将所需的初始化代码放在何处?
当我的构造函数是属性设置器的纯参数时,我不确定在哪里放置类正常工作所需的其他代码 例如,在JavaScript中,我正在编程一个Dependency injection 使用依赖项注入时,将所需的初始化代码放在何处?,dependency-injection,factory-pattern,constructor-injection,abstract-factory,Dependency Injection,Factory Pattern,Constructor Injection,Abstract Factory,当我的构造函数是属性设置器的纯参数时,我不确定在哪里放置类正常工作所需的其他代码 例如,在JavaScript中,我正在编程一个WindowMessageController,它处理window对象上的message事件 为了使其工作,我必须在某个地方附加处理程序: var controller = this; this.applicableWindow.addEventListener("message", function(event) { controller.messageAct
WindowMessageController
,它处理window
对象上的message
事件
为了使其工作,我必须在某个地方附加处理程序:
var controller = this;
this.applicableWindow.addEventListener("message", function(event) {
controller.messageAction(event.data);
}
这些东西正确地属于哪里?
元素上的按钮
类的实例,那么答案是什么?突然
button = buttonFactory.create(domButtonEl);
似乎更有用。我会将此代码放入initialize(window)方法中,但此方法不能是WindowMessageController的公共API的一部分-它必须是可见的,并且只能由直接用户调用(因此组合根和测试)。 所以,当DI容器返回WindowMessageController实例时,调用初始化方法是容器的责任
编辑回复:是的,这个工厂似乎是我最好的选择。顺便说一句,别忘了工厂可能应该有一个dispose方法(即在按钮的情况下取消绑定事件处理程序)。我会将此代码放入initialize(window)方法中,但此方法不能是WindowMessageController的公共API的一部分-它必须是可见的,并且只能由直接用户调用(因此组合根和测试)。 所以,当DI容器返回WindowMessageController实例时,调用初始化方法是容器的责任
编辑回复:是的,这个工厂似乎是我最好的选择。顺便说一句,不要忘记工厂可能应该有一个dispose方法(即在按钮出现时取消绑定事件处理程序)…我认为您需要创建一个负责事件分发的Router类。此路由器应订阅所有事件,并在控制器之间分发它们。它可以使用某种类型的消息控制器映射,注入构造函数。我认为您需要创建一个负责事件分发的路由器类。此路由器应订阅所有事件,并在控制器之间分发它们。它可以使用某种消息控制器映射,注入构造函数