Castle Windsorは、制御の反転ツールです。それのような他のものがあります。
そこに、事前に構築され、事前に配線された依存関係を持つオブジェクトを提供できます。 「new」演算子ではなく、リフレクションと構成によって作成されたオブジェクトグラフ全体。
ここから始めましょう:http://tech.groups.yahoo.com/group/altdotnet/message/10434
メール送信クラスがあると想像してください。EmailSender。別のクラスWorkflowStepperがあるとします。WorkflowStepper内では、EmailSenderを使用する必要があります。
あなたはいつも言うことができますnew EmailSender().Send(emailMessage);
しかし、それ(の使用)はnew
、変更するのが難しいタイトな結合を作成します。(これは結局のところ小さな不自然な例です)
では、この悪い男の子をWorkflowStepper内で新しくする代わりに、コンストラクターに渡したとしたらどうでしょうか。
それで、それを呼んだ人は誰でもEmailSenderを新しくしなければなりませんでした。
new WorkflowStepper(emailSender).Step()
1つの責任しか持たないこれらの小さなクラスが何百もあると想像してください(google SRP)..そしてWorkflowStepperでそれらのいくつかを使用します:
new WorkflowStepper(emailSender, alertRegistry, databaseConnection).Step()
EmailSender
あなたが書いているときの詳細を気にしないことを想像してみてWorkflowStepper
くださいAlertRegistry
あなたは自分が取り組んでいる懸念について心配するだけです。
オブジェクトと依存関係のこのグラフ(ツリー)全体が実行時に接続されると想像してください。これを行うと、次のようになります。
WorkflowStepper stepper = Container.Get<WorkflowStepper>();
WorkflowStepper
必要な場所に自動的に入力されたすべての依存関係を実際に処理できます。
ありませんnew
何が何を必要としているかを知っているからです。
また、テスト可能で再現性のある方法で、より適切に設計されたDRYコードを使用して、欠陥を減らすことができます。