using System; using Microsoft.Practices.Unity; namespace EntLibTest { class Program { static void Main(string[] args) { var c = new UnityContainer(); // JapaneseGreeterとEnglishGreeterを登録する // 同じ型で複数登録しない場合は、引数の名前はいらない // c.RegisterType<IGreeter, JapaneseGreeter>()でOK c.RegisterType<IGreeter, JapaneseGreeter>("japanese"); c.RegisterType<IGreeter, EnglishGreeter>("english"); // IGreeterでjapaneseで登録し
プログラミング関連Blog 私の興味の端から端までをお届けします! 【免責事項】このサイトの情報は私の個人的な見解で、私以外の意見を代弁するものではありません。 Source and Project Unity Application Block 1.2のRegisterInstanceメソッドとRegisterTypeメソッドの違いに関して取り上げます。 RegisterInstanceメソッド RegisterInstanceメソッドはDIコンテナにTypeとNameをキー情報として、Typeにキャスト可能なインスタンスを登録することができます。LifetimeManagerを指定しない場合は、ContainerControlledLifetimeManagerがデフォルト値として設定されます。 RegisterInstanceメソッドで登録した場合に注意しなければならないのは、DIコ
ASP.NET MVC は DI(Dependency Injection: 依存性の注入)がとても簡単です。 DI については、何かに依存するものを外からもらうことで依存せずに済むくらいに思ってください。テストがしやすくなることや、クラスが絡み合わずに済むことなどがメリットとして挙げられます。さらに、DI コンテナ(依存したものの入れ物)でオブジェクトの管理もできるので、DB 接続の管理(生成の一元化、自動破棄など)などでもメリットがあります。 プロジェクトの作成とライブラリの参照 まずは、MVC プロジェクトを作成します*1。 DI の仕組みには patterns & practices お手製の Unity を使います。NuGet で Unity で検索して Unity.Mvc をインストールしてください。 パッケージマネージャーコンソールで行う場合は下記の通りです。 PM> Ins
I'm trying to expand my mind around dependency injection in .NET (beyond the two frameworks I've personally used) and an starting to put together a list of .NET Dependency Injection Containers and IOC resources. Here's what I've got so far. What am I missing? Castle Windsor based on the Castle MicroKernel. Licensed under Apache 2 Currently 1.0 RC3 Well documented and used by many. StructureMap has
ASP.NET MVCでテストを書く際に考えたことのメモ おすすめのパッケージ Moq テストのためのダミーオブジェクトを作成するパッケージ。 簡単な使い方 var mock = new Mock<IHelloModel>(); mock.Setup(x => x.Hello()).Returns("test return"); IHelloModel hello = mock.object;
PHPでDI( Dependency Injection )をします。 DIとは、日本語訳で依存性の注入です。 依存性というのは、クラスから別のクラスを呼び出している状態です。 例えば、犬が鳴いたら猫も鳴く。 <?php class Dog { public function barks() { $cat = new Cat(); $cat->meow(); } } Dogクラスのbarksメソッドは、Catクラスに依存しています。 こういったようにクラス内部で別のクラスを new しているものを Dependency Lookup といいます。 こういった依存をしている場合、テスト実践者ならお気づきだと思いますがテストが大変です。 Catクラスが出来上がってないと、テストできないしCatクラスがDBやネットワークを介するクラスであれば難易度が上昇します。 テストできるように依存しているク
Type-hint your constructor parameters and the container can guess which dependencies to inject. class Foo { private $bar; public function __construct(Bar $bar) { $this->bar = $bar; } } Covers 80% of the use cases with 0 configuration. Expressive configuration PHP-DI's configuration is written in PHP, allowing to benefit from auto-completion, static analysis and refactoring support with any IDE.
2014-11-02 学習記録:Spring 学習記録 Spring [学習記録] Spring 参考書籍 Spring3入門 ――Javaフレームワーク・より良い設計とアーキテクチャ 内容:2章 SpringのDI DIとは何か DI(Dependency Injection):依存性の注入 オブジェクト間の依存関係を作成 あるオブジェクトのプロパティ(インスタンス変数)にそのオブジェクトが利用するオブジェクトを設定 「DIコンテナ」となるとクラスのインスタンス化などのライフサイクリ管理を行う機能を持つことが多い DIコンテナから受け渡されるインスタンスをインタフェースで受け取れば、インタフェースベースのコンポーネント化を実現可能 DIコンテナはクラスのインスタンス化を一回しか行わず、必要に応じて使い回すので自動でSingletonが実現される DIの使い所 値をRDBから持ってきてイ
この記事は Symfony Advent Calendar 2015 の16日目です。昨日は@Issei_Mさんの「最近のSymfony Standard Editionのディレクトリ構成」でした。 内製フレームワークからの移行先を探してSymfonyを調査中です。その過程でDIのAuto Wiringの使い方を確認したので、ここにまとめます。 概要 Symfony 2.8ではサービスのAuto Wiringが可能になりました (New in Symfony 2.8: Service Auto Wiring (Symfony Blog))。これまでは、services.ymlにサービスの名前とクラス名の定義、依存先のサービスも(たとえばコンストラクタの引数として)指定が必要でした。Auto Wiring有効時は、コンストラクタのタイプヒンティングを利用して、これらの定義が簡略化できるように
前提 本記事は「Spring3 入門」(通称:緑本)を参考にしました Spring:Java言語のフレームワーク Springの肝はDIとAOP 【DI】(Dependency Injection) 〜概要〜 日本語訳すると「依存性の注入」です。 SpringのDIコンテナの利点は大きく2つあります。それは、 クラスからnew演算子を消せる インスタンス化を1回で済ませられる(Singleton) です。 〜実装〜 実現する方法は2通りあります。 アノテーションを使う Bean定義ファイルを使う です。 アノテーションベースの方のみ説明書きます。 インスタンス変数(注入先の変数)の前に@Autowiredをつけると、@Componentアノテーションのついたクラスの中から該当するものを探し、newしてインスタンスを突っ込んでくれます! ▼(実装例)
今日はPHP界隈で大人気のDependency Injectionと、それに関連する用語について整理しておこうと思います。 以下のような状況があるのではないか?と思ったからです。 多くのPHPユーザがDependency Injection(DI)をよくわかっていない、あるいは正確に説明できません。 そして、デザインパターンである「DIパターン」とDIをサポートするツールである「DIコンテナ」を混同しています。 また、「DIパターン」と「サービスロケータパターン」をうまく区別できていません。 Dependency Injectionとは何か? Dependency Injectionとは「Dependency」を「Injection」するというデザインパターンです。 日本語では何故か「依存性の注入」と訳されており、これが混乱の元ではないかと思います。 日本語で「依存性」と言うと、「依存性は
DI の自由度は諸刃の剣 近ごろ、「実プロジェクトでDIコンテナ(注1)を導入している」という話をちらほら耳にするようになりました。それと同時に、「DIコンテナを使ったプロジェクトが大変なことになっている」という話も耳にするようになりました。DIの魅力を十分に享受して低コスト、高品質を実現しているプロジェクトがある一方で「DIを導入してみたのはいいのだけれど、DIの設定ファイルが大きくなりすぎて管理しきれない」「DIを使っているのに、テスタビリティが全然向上していない」など苦労しているプロジェクトもあるようです。この差はいったいどこから来るのでしょうか。 DIは、EJBなどと比べると比較的取っ付きやすい技術ではありますが、ほかの技術同様、誤った使い方では十分に力を発揮できません。DIコンテナは非常に単純明快な技術ではありますが、そのシンプルさ故に自由度が高くさまざまな使い方ができます。その
PHPでのDIコンテナのわかりやすい説明としては「最小のDIコンテナ in PHP」や「DIコンテナなんていらない」の中で説明されているし、DIコンテナをより詳細に推し進めた形としてはSeasar2のドキュメントか何かを見ていただいた方がいいと思います。DIコンテナは使いこまれた技術で基本概念や実装方法については知られていますので、ここでは、ZFを例にしてDIコンテナを使うメリットについて具体的に検討してみたいと思います。 Zend Frameworkを例にとると 前記事Zend_Application(1) - noopな日々で触れた下記のページにあるように、 http://www.infoq.com/jp/articles/drinking-your-guice-too-quickly DIコンテナはサービスロケーターから進化する流れがわかりやすいわけですが、それらを前提的な話として、
以下の文章は、Martin Fowler の「Inversion of Control Containers and the Dependency Injection pattern」を、かくたにが翻訳したものです。原著者の許可を得て翻訳・公開しています。 翻訳にあたっては、kdmsnr さんにご協力をいただきました。ありがとうございます。公開後の改訂履歴を記事の最後に記述しています。 Java コミュニティでは軽量コンテナが花盛りである。 軽量コンテナは、異なるプロジェクトのコンポーネントをひとまとまりのアプリケーションとして組み立てることを支援する。 このようなコンテナの根底には、コンポーネントの結び付け方についての共通したパターンがある。 そのパターンのコンセプトは「Inversion of Control(制御の反転)」と、まことに包括的な名前で呼ばれている。 本記事では、このパタ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く