198

私は長年のWindows開発者であり、win32と初期のCOMに歯を食いしばっています。私は2001年から.NETを使用しているので、C#とCLRにかなり精通しています。Stack Overflowに参加し始めるまで、CastleWindsorのことは聞いたことがありませんでした。Castle Windsorの「GettingStarted」ガイドを読みましたが、クリックされません。

この老犬に新しいトリックを教えて、CastleWindsorをエンタープライズアプリに統合する必要がある理由を教えてください。

4

5 に答える 5

373

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コードを使用して、欠陥を減らすことができます。

于 2008-09-24T01:31:16.417 に答える
3

IoC は、生産性の向上と開発チーム (PM、BA、BO を含む) の楽しみに向けた正しい方向への足がかりだと思います。開発者とテストの間で懸念事項を分離するのに役立ちます。フレームワークが出入りする可能性があるため、柔軟性を考慮して設計するときに安心感を与えます。

IoC (CW や Ninject など) が突き刺す目標を達成するための最善の方法は、1 番目と 2 番目の政治を排除することです。これらの 2 つのソリューションは IC に関連していないように見えますか? 彼らです :)

于 2015-02-18T18:46:09.450 に答える
3

Castle Windsor はDependency Injection container.、これを使用すると、依存関係を注入して、新しいキーワードを使用して依存関係を作成せずに使用できることを意味します。たとえば、リポジトリまたはサービスを作成し、それを多くの場所で使用したいとします。最初にサービス/リポジトリを登録する必要があり、必要な場所に注入した後に使用を開始できます。キャッスルウィンザーを学ぶために私が従った以下のチュートリアルを見ることができます.

リンク

それがあなたを助けることを願っています。

于 2017-03-07T18:07:37.787 に答える