DI
拙作のフレームワークではDIコンテナの評価式のエンジンを挿げ替えることができるようになっているが、Javaでもこの仕様を踏襲する予定だ。 過去記事一覧検索 "DI 式評価".NETでは、Jscript.NET、IronPython、PoweShellと試してきたが、JavaではJ2SE6が提供…
例の善し悪しは別にして、DIの式評価エンジンにMozilla Rhino:Java Script for Javaを使うとこんなことも出来てしまう。(設定ファイルは開発中のものなので適当) <components> <component name="mainFrame" class="javax.swing.JFrame" instance="singleton" autoBinding="none"> <property name="Visible">true</property> <method name="setDefaultCloseOperation"> <arg><js>JFram…</js></arg></method></component></components>
本来は城の名前だが、ここで紹介するのは.NETのフレームワーク"Castle"に含まれるDIコンテナの実装。 Castle Windsor Container このフレームワーク、素晴らしいと思うのだがいまひとつ日本では知名度が低い。そんなCastle Windsor Containerだが、珍しく日…
OOPで、それも静的な言語を使うシステムでは、どんなに上手く設計したインタフェースやクラスであっても(上手く設計したからこそ)開発していく途中で必ず派生物を作成する必要が出てくる。(継承という概念があるので派生物を作るのを前提で設計しているとも…
昨日の続き。 これらの条件を満たしている必要があるのだが、ここで大きな問題がある。それは、引数の個数が同一なコンストラクタのオーバロードが複数ある場合、引数が代入可能かを調べるためには、引数がインジェクションされる際の型が必要なのである。こ…
またまた久しいDIネタ。最近DIネタを扱う機会が減っているが、これは拙作のリッチクライアント(スマートクライアント)用のフレームワークに組み込まれて、既に実際の開発で使っているためにバグFIXがメインになっているためであり、決して使わなくなってしま…
業務アプリにおけるOOPの黎明期、既存の処理を拡張する必要があった場合、継承はかなり優先度の高い選択肢にあったと思うが(差分プログラミングという言葉がもてはやされた頃だ)、インタフェースの登場で優先度は低くなった。 DIコンテナのような、依存性を…
久々のDIコンテナネタ。拙作のDIコンテナを使用した、.NET 2.0 WindowsForms用のフレームワーク開発も佳境に入っているが、そんな中、DIコンテナによるインジェクションの方法に関して、アプリケーション開発サイドから要望が発生した。.NET C#言語は#if〜#e…
発売前から日記で薦めておいて、自分では読んでいなかったのだがようやくちゃんと読めた。 表紙を見ると、いかにもSeasar2を利用した開発のノウ・ハウ本のようなイメージを持つ人がいると思うが、騙されてはいけない。4章まではSeasar2のシの字位しか登場し…
制御の逆転とIDisposable (DIxAOPによる解決)の続き。 追記 : このままではちょっとしたまずいことが発生する。それに関してはまた別なエントリで。 含みを持たせた終わり方だったのだが、ここで書いたちょっとしたまずいこととは、IDisposableなオブジェク…
んなわけでAOPでIDisposableをインターセプトして、IDisposable.Disposeを無視(artonさんの言ってる事) or コンテナ制御への無効な介入として拒絶して例外を投げる。(自分が言ったパターン) AOPコンテナによるオブジェクトライフサイクルの管理 - 菊池 B…
解らなくなってきたので、整理することにした。 例えばDIコンテナで生成、管理しているシングルトンなオブジェクトが(singletonってのがポイント)、クライアント側で(誤用を含めて)Disposeされてしまったオブジェクトの復旧をどうするか、ということが、ふと…
IDisposableを実装する(かもしれない)オブジェクトの後始末は簡単だ。IDisposableを実装していれば、メソッドDispose()を呼べばよい。 if ( component is IDisposable ) { (component as IDisposable).Dispose(); } ならば、一度DisposeされたIDisposableオ…
DIコンテナを使用する際の、コンポーネントの生成に関する属性があったとする。例えばインスタンスのライフサイクルを決定するInstance属性。採り得る値は、唯一つのインスタンスを保障する"singleton"と、デマンドでインスタンスを生成する"prototype"の2…
akirameiさんからご指摘頂いたので、再度IronPythonEvaluatorクラスを修正した。 public IronPythonEvaluator() { EngineOptions engineOptions = new EngineOptions(); engineOptions.ShowClrExceptions = true; this.engine = new PythonEngine(engineOpti…
私にとって、すっかりシリーズ化してしまった感のある.NETのDIコンテナにおける式評価エンジンの実装だが、現時点で評価式と式評価のクラス構成はこのようになった。 むろん、これら全てを使う訳は無く、実際には適材適所で使い分けることを考えている。 Jav…
DIコンテナにおける式評価のために必要なのは、以下の二つのインタフェースを実装することだ。まずは評価式のためのインタフェース。これはSeasae2で使用しているものと、似たインタフェースだ。 public interface IExpression { object Evaluate(IDIContain…
そもそも、IronPythonの評価式上(eval)で"DateTime.Now"をどう書くかすら判らない状態だ。(そもそも評価式中でも有効な、.NET Frameworkのラィブラリィのインポートが書けるのだろうか? 書き方があるのであれば、どなたか、是非教えて頂けないだろうか) と弱…
DIコンテナ(インターセプションによるAOP機能付き)をメインに据えたシステム開発は、ある種のデバッグを困難にすることがある。その理由はいろいろあるが、DIコンテナに着目した場合 リフレクションを多用している AOPというコードを差込むメカニズムがある …
少し前のエントリに対して、すぎもとさんから言及頂いた。 インスタンスを必要になってから生成するsingletonなモードを新しく追加すれば良いのですが、diconファイルのDTDに変更が必要になってしまいます。そこで手っ取り早く回避する方法ですが、S2コンテ…
すぎもとさんのところにもちょっと書いたが、.NET スマートクライアント用にDIコンテナを書いて解ったことは、WebアプリケーションのDIコンテナの適用要件と、クライアント(GUI)アプリケーションのDIコンテナのそれは随分と違うということだ。特にリソースの…
メモ。instance="prototype"のコンポーネントで構成されているプロジェクトと、instance="singleton"で構成されているプロジェクトで起動時間に差が出ることに気が付いた。DIコンテナに登録するコンポーネントのインスタンスタイプをsingletonとマークした場…
5/31のエントリ?に対して、すぎもとさんに言及頂いた。 インスタンスの生成が頻繁に必要で、インスタンス生成時のコストを下げたい場合は、S2Container.NET標準のAopProxyが有利です。逆にインスタンスの生成時のコストがそれほど重要では無い場合は、Aspect…
先日のエントリ「WindowsFormsアプリケーションにおけるDI戦略(まとめ)」に対して、ひがさんからコメントを頂いた。 コンテナの初期化の時間をできるだけ減らすことが重要なら、Seasar2.4のHOT deployのようにオンデマンドでデプロイする方法もあります。HOT…
ここ一ヶ月位、WinwodowsFormsアプリケーション上でDIコンテナを使う際に考慮しなくてはならない点に関して言及してきたが、やることはやった感がある。そこで、このテーマの最後として、何を行ったかをまとめておこうと思う。 DynamicProxyによるAOP実装 .N…
.NETのDIコンテナにおいては、リフレクション情報のキャッシュが有効か、無効なのかに関して、そろそろ決着をつけようと思う。前回の日記ではキャッシュの有無によりアプリケーション起動まで、つまりDIコンテナの生成〜初期化の時間に有意な差は発生しなか…
ここしばらくは、.NETスマートクライアントでDIコンテナを使う際の省力化、効率化、性能向上を目的としたエントリをテーマにしていたが、先日のAOPネタ他でそれも大体は目処がついた。以下、ネタにしてきた内容の一覧だ。 Castle.DynamicProxyを用いたAOPの…
.NETのリフレクション情報の取得処理は元々軽いので、キャッシュしても有意差はでない キャッシュのメリットがデメリットに相殺されている ここ最近、Javaと.NETをいったりきたりしていたのですっかり忘れていたのだが、.NETは型に対してのメタデータをモジ…
日記でも何度か紹介しているが、Seasar2と同様のプロパティインジェクションで用いるアノテーション(カスタム属性)の宣言は、拙作の.NET用DIコンテナでも同様に、以下のように記述する。 public class HatenaUser { [Binding(BindingType = BindingType.MUST…
RunspaceInvokeクラスのInvokeメソッドによるスクリプト式の実行結果の型Collectionだが、戻る値には別に深い意味は無かった。単に式評価の結果が複数あった場合に対応しているだけである。 例えば単純な例として、以下のようにC#からPowerShellスクリプトを…