1

私は現在、より大きな Web フレームワーク内に収まる小さなモジュールにコンストラクタ依存性注入を使用している状況があります。

正常に動作していますが、2 つのオブジェクトを渡す必要がある新しいクラスが導入されています。ただし、オブジェクトの 1 つはセットアップに多くの作業が必要です。基本的には、他のオブジェクトを作成してオブジェクトに渡す準備が整った状態にするために、約 4 つのメソッド呼び出しが必要です。

私のジレンマは、関連する作業のためにコンストラクターインジェクションが役に立たないということですが、特にこの1つのオフユースケースでは、iocコンテナーの導入はやり過ぎです。

では、これはどのように処理すればよいのでしょうか。これら 2 つのオプションの中間に位置する何らかの解決策はありますか?

4

3 に答える 3

2

事実上、4 つの5 つの選択肢があります。

  • 貧乏人の DI (オブジェクトを手動で作成し、コンストラクターに渡す)
  • IoC コンテナー
  • 工場方式
  • 抽象工場
  • ビルダー(ありがとう、マーク・シーマン!)

私は通常、IoC コンテナーから始めますが、多くの DI を行います。(私はあまりにも多くの密結合コードベースを見てきました。)

IoC コンテナーを導入したくない場合は、Poor Man's DI に傾倒します。

オブジェクト指向言語 (C# だけでなく) を使用している場合は、『.NET での依存性注入』という本を読むことをお勧めします。パターンとアンチパターンについて詳しく説明しています。

于 2013-11-10T01:57:28.793 に答える
1

オブジェクトの 1 つは、セットアップに多くの作業が必要です。基本的には、他のオブジェクトを作成してオブジェクトに渡す準備が整った状態にするために、4 つのメソッド呼び出しが必要です。

OK、次にオブジェクトを作成し、完全に初期化されたオブジェクトをコンストラクターに渡します。

そのオブジェクトを作成することは、ビルダーまたはファクトリーの仕事のように聞こえます。

于 2013-11-10T13:43:43.513 に答える
1

私のジレンマは、関連する作業のためにコンストラクター注入が役に立たないことです。

Constructor Injection私はそれを避けることを好み、理由は見当たりません。

最新の IoC フレームワークを使用すると、ファクトリ/ファクトリ メソッドを介して「セットアップに多くの作業が必要」な作成ロジックを指定できます。

のインスタンスを構築するために必要な手順の数にIMyService関係なく、コンストラクターの依存関係を使用してそれを注入するだけです。

ウィンザー城

container.AddFacility<FactorySupportFacility>()
  .Register(
   Component.For<IMyFactory>().ImplementedBy<MyFactory>(),
   Component.For<IMyService>()
        .UsingFactoryMethod(k => k.Resolve<IMyFactory>().Create())
  );

団結

var container = new UnityContainer();
container.RegisterType<IMyFactory, MyFactory>();
container.RegisterType<IMyService>(
    new InjectionFactory(c => c.Resolve<IMyFactory>().Create()));
于 2013-11-10T15:05:21.970 に答える