当实现依赖注入时,Mark Seemann和Misko Hevery都表示构造函数应该简单,并且只接收依赖项。它们不应该做其他任何事情。(这里和这里)
然而,我经常希望订阅传递的依赖项的事件,但如果我在构造函数中这样做,则构造函数会执行更多任务,而如果我不这样做,则对象尚未完全初始化。
那么,在组合根中实例化需要订阅事件的对象,连接它们的事件,然后注入这些实例化的对象是否正确?
例如:
与之相对的是:
然而,我经常希望订阅传递的依赖项的事件,但如果我在构造函数中这样做,则构造函数会执行更多任务,而如果我不这样做,则对象尚未完全初始化。
那么,在组合根中实例化需要订阅事件的对象,连接它们的事件,然后注入这些实例化的对象是否正确?
例如:
// Composition root
Panel panel = new Panel();
Button button = new Button();
panel.OnButtonClick += button.Click;
Register<Panel>().AsSingle(panel);
Register<Button>().AsSingle(button);
// Panel Class
private Button _button;
public Panel(Button button)
{
_button = button;
}
void OnButtonClick()
{
// handle button click
}
与之相对的是:
//composition root
Register<Panel>().AsSingle(panel);
Register<Button>().AsSingle(button);
// Panel Class
private Button _button;
public Panel(Button button)
{
_button = button;
OnButtonClick += button.Click
}
void OnButtonClick()
{
// handle button click
}