0

私のクラスが単一のインスタンスを返して共有する必要があるため、シングルトンを返す 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)
   {

   }

}
4

1 に答える 1

0

MyClass クラス全体を上位層に移動することを検討しましたか? このクラスが何をするのか説明していないので、ばかげた答えかもしれませんが、クラスはリポジトリに依存しているように見えるので、ある種のビジネスロジックを実行していると思います。したがって、データ層にあるべきではありません。これにより、通常のようにシングルトンをクラス内に直接実装できます。

于 2013-06-26T22:37:37.910 に答える