私は最近、シングルトンはロギングと構成にのみ適しているという私の見解に異議を唱えました。また、依存性注入を使用すると、サービスやリポジトリをシングルトンとして使用できない理由がわかりません。
DI はインターフェイスを介してシングルトン インスタンスを挿入するため、カップリングはありません。唯一の合理的な議論は、サービスが状態を共有している可能性があるということですが、考えてみれば、サービスは状態を共有しない独立したユニットであるべきです。はい、リポジトリに注入されますが、リポジトリ インスタンスを作成してサービスに渡す方法は 1 つしかありません。リポジトリは共有状態を持つべきではないため、シングルトンにできない理由はわかりません。
たとえば、単純なサービス クラスは次のようになります。
public class GraphicService : IGraphicService
{
private IGraphicRepository _rep;
public GraphicService(IGraphicRepository rep)
{
_rep = rep;
}
public void CreateGraphic()
{
...
_rep.SaveGraphic(graphic):
}
}
変更されない、または独自の状態を持つリポジトリを除いて、状態はサービスで共有されません。
問題は、サービスとリポジトリに状態がなく、インターフェイス、構成、または同じ方法でインスタンス化されたものを介してのみ渡される場合、それらを singleton として持たないのはなぜですか?