我最近受到了我的观点的挑战,即单例只适用于日志记录和配置。有了依赖注入,我现在看不到你不能将服务或存储库用作单例的原因。
没有耦合,因为 DI 通过接口注入单例实例。唯一合理的论点是您的服务可能具有共享状态,但如果您考虑一下,服务应该是没有任何共享状态的独立单元。是的,它们确实被注入了存储库,但是您只有一种方法可以创建存储库实例并将其传递给服务。由于存储库永远不应该具有共享状态,因此我看不出它也不能是单例的任何原因。
例如,一个简单的服务类如下所示:
public class GraphicService : IGraphicService
{
private IGraphicRepository _rep;
public GraphicService(IGraphicRepository rep)
{
_rep = rep;
}
public void CreateGraphic()
{
...
_rep.SaveGraphic(graphic):
}
}
服务中不共享任何状态,除了存储库,它也不会更改或拥有自己的状态。
所以问题是,如果您的服务和存储库没有任何状态并且仅通过接口、配置或其他任何以与它们相同的方式实例化的方式传入,那么您为什么不将它们作为单例呢?