gpt4 book ai didi

c# - 依赖注入(inject)——订阅组合根而不是构造函数中的事件

转载 作者:太空宇宙 更新时间:2023-11-03 13:36:54 27 4
gpt4 key购买 nike

在实现 DI 时,Mark Seemann 和 Misko Hevery 都说构造函数应该简单,并且应该只接收依赖项。他们不应该做任何其他事情。 (herehere)

然而,我常常想订阅传入的依赖项的事件,但是如果我在构造函数中这样做,那么构造函数不仅仅是接收它的依赖项,如果我不这样做,那么对象就不是完全初始化。

那么,在组合根中实例化那些需要订阅事件的对象, Hook 它们的事件,然后注入(inject)这些实例化的对象是否正确?

例如:

// 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
}

最佳答案

是的,连接组合根中的事件是这里的正确方法。

关于c# - 依赖注入(inject)——订阅组合根而不是构造函数中的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18383271/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com