在实现 DI 时,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
}