私のクラスが単一のインスタンスを返して共有する必要があるため、シングルトンを返す Factory を使用するつもりでした。私の明白なアプローチは、この Factory を問題のクラスにstatic
メソッド (つまり `.Create()) として直接配置し、それで完了することでした。
私が抱えている問題は、このクラスのコンストラクターが DI に依存しており、いくつかの依存関係を注入する必要があることです。このクラスは my にDomain Layer
あり、注入する必要があるインターフェースを表すリポジトリ クラスの新しいインスタンスをインスタンス化できません。リポジトリ パターンも使用しています。リポジトリ レイヤーはドメイン モデル レイヤーにアクセスできますが、明らかに私のドメイン モデルはリポジトリにアクセスできません (循環参照)。結論: ファクトリに注入される依存関係を表す具体的なリポジトリ タイプをインスタンス化することはできません。
私が考えることができる唯一の解決策は、ファクトリをレイヤーの上に移動することです。これは、単一のインスタンスを持つ必要性はクラス自体ではなく、実装の詳細によるものであるためです。なぜ私のクラスが気にする必要があるのですか。どのようにインスタンス化されるかは気にしません。
問題は、元のクラスの外で、このクラス型から返されたシングルトンを管理するファクトリを持つことが適切かどうかわかりません。これが私がやりたいことです(コードは質問に集中するために大幅に単純化されています:
レイヤー 1: (リポジトリへの参照があり、インスタンスを「新しく」作成して注入できますMyClass
public MyClass Create()
{
if myClass = null
myclass = new MyClass(new Repository1(), new Repository2());
else
return myclass;
}
レイヤ 2:
public class MyClass
{
public MyClass(IRepository1 repository1, IRepository2 repository2)
{
}
}