使用 IoC 容器时在哪里注册观察者?



在我当前的应用程序中,我正在使用一个'自制的'可观察类来实现观察者模式。观察器(实现接口)可以侦听某些事件。

我正在将越来越多的项目切换到使用 IoC 容器,但我未能在代码中找到一个好位置来向可观察量注册观察器。

我看到的做到这一点的方法是:

A) 将可观察量注入观察者。
构造函数不应该做实际的工作,但即使使用方法或字段注入,这也会将观察者与可观察对象耦合。如果反过来也是如此。

B)创建一个可观察的工厂并在那里进行。
在这种情况下,创建可观察量取决于多个观察器的实现。

C) 按工厂创建观察器并在那里完成。
虽然这对我来说似乎是关于耦合的最好,但事实证明,对于 DRY 来说却很糟糕。在某些情况下,工厂最终成为观察者的字段和构造函数的副本,加上可观察的和用于注册的一行代码。

有没有办法以干净的方式处理此注册?如果没有,是否有令人信服的论据来使用某种方式而不是其他方式?

解决方案是发现Resolve()和Instantiate()方法之间的区别。

我一直在使用 Resolve()。有了这个,我将以绑定到容器的方式收到一个观察者。

但是,Instantiate() 并不关心类如何绑定到容器。它以标准方式创建类,但仍注入依赖项。因此,这可以用于工厂内部的观察者。

最新更新