在我的设计中,我已经到了一个重点,我正在认真考虑单例。
众所周知,“常见”的论点是“永远不要这样做!这太可怕了!”,就好像我们在代码中乱扔一堆goto
语句一样。
ServiceStack是一个很棒的框架。我自己和我的团队都在使用它,并且我们有一个复杂的基于 Web 服务的基础架构要实施。我一直在鼓励异步设计,并尽可能SendAsync
在服务堆栈客户端上使用。
鉴于我们有所有这些不同的系统在做不同的事情,我突然想到我想要一个通用的记录器,(实际上是一个 Web 服务本身,如果 Web 服务不可用,则回退到本地文本文件- 例如,一些恶魔正在跟踪建筑物)。虽然我是依赖注入的忠实拥护者,但将“使用此记录器客户端”的引用传递给每个异步请求似乎并不干净(至少对我而言)。
鉴于 ServiceStack 的失败签名是一个Func<TRESPONSE, Exception>
(并且我对此没有错),我什至不确定最初进行调用的封闭方法是否具有有效的句柄。
但是,如果此时我们有一个单例记录器,那么我们在世界的哪个位置、我们在哪个线程上以及我们在无数匿名函数的哪个部分都无关紧要。
这是一个公认的有效案例,还是一个非争论 - 单例?