【WPF】【Unity】コンテナからのインスタンスの提供方法を決定するオブジェクト。

  • 2009.02.17 Tuesday
  • 21:42
先日からUnity Application Blockを取り上げてBlogに書いております。そもそもUnity Application Blockを試してみたいと思ったのは3度目でして、一発目は6月か7月あたり、これは人づてに噂を聞いたからで、それまでDIコンテナはSeasar.NETしか触ったことがなかったので興味をしてしていたのですが、WPFの触っている方が楽しかったので、煙もただずな状態でした、それから「Composite Application Library」に興味を持った去年の10月ごろ、ちょっとサンプルコード書いて終わりでした。ということで今回が三度目の正直なのですが!!

目から鱗が取れました!

DIコンテナに型の関係を登録するメソッド(RegisterType)を呼び出す際に、LifetimeManagerというオブジェクト渡すようになっています。このLifetimeManagerは抽象クラスなので、インスタンスを生成するにはどうすればよいのか調べてみました。まずは、調べた結果をまとめたクラス図を見てみると

LifetimeManager

拡大版

IBuilderPolicyインターフェイスを継承するILifetimePolicyインターフェイスがあります。そのILifetimePolicyを継承するのがLifetimeManager抽象クラスです。

LifetimeManager抽象クラスからの継承関係を図にしたのが、上記のクラス図になります。

インスタンス化できるLifetimeManagerは下記のとおり

1.ExternallyControlledLifetimeManager
  A that holds a weak reference to it's managed instance.
2.PerThreadLifetimeManager
  A that holds the instances given to it, keeping one instance per thread.
3.TransientLifetimeManager
  An implementation that does nothing, thus ensuring that instances are created new every time.
4.ContainerControlledLifetimeManager
  A that holds onto the instance given to it.When the is disposed, the instance is disposed with it.

※ContainerLifetimeManagerというのもいます。

私のつたない英語力で翻訳してしまうと嘘を書いてしまう恐れがあるのであえて翻訳はしませんが、ものすごく簡単な英語なのでエキサイ・・・いやいや、ふつうに読めますね。DIコンテナが管理するインスタンスのライフタイムを管理するオブジェクトがLifetimeManagerということが大体読み取れます。

これらを平たく言えば

ExternallyControlledLifetimeManager
呼び出した場所のスコープ範囲のライフライムを持つインスタンスを生成する。インスタンスがGCに回収されない限りは、DIコンテナは同一のインスタンスを返す。

PerThreadLifetimeManager
Thread毎のSingleton。

TransientLifetimeManager
単なるFactoryMethod。インスタンスをDIコンテナに要求する度にインスタンスを生成する。new するのと同じ動き。

ContainerControlledLifetimeManager
プロセス単位のSingleton(←間違ってるかもしません)。コンテナ単位で1インスタンス。 IDisposableを実装しているのが特徴。

と、私の狭い知識で知っているDIコンテナのライフタイムと同じような設定が可能なようです。ただし、Unity Application Blockはこれからがすごい!目から鱗です。

ライフタイムを管理するマネージャーがオブジェクト化されている

という点が素晴らしいアイデアだと私は感動しました。DIコンテナの設定情報をどうするか、XAML?属性?なんていう議論が巷ではあるようですが、この設定情報の一部にライフタイムというのが上げられると思います。なんちゃってXMLで記述してみると

<Hoge LifeTime="Singleton">
 <ClassType>...</ClassType>
</Hoge>

みたいな書き方をされると思いますが、LiftTimeは属性値として定義され、要するに静的な単なる値です。これが、Unity Application Blockで提供するライフタイムの管理というのは、明確な境界をもったオブジェクトとして具象化され、アプリケーションの実行中にマネージャーオブジェクトが持つ機能や状態によりDIコンテナの振る舞いや、管理されているインスタンスに影響を与える仕組みが提供できるポテンシャルを持っているということになります。後者は難しいと思いますが(笑)

なのでこのライフタイムのパラダイムの変化は私にとって目からうろこでした。

以上。力説してしまいました。
コメント
コメントする








    
この記事のトラックバックURL
トラックバック

calendar

S M T W T F S
     12
3456789
10111213141516
17181920212223
24252627282930
31      
<< March 2024 >>

あわせて読みたい

あわせて読みたいブログパーツ

selected entries

categories

archives

recent comment

  • 【WPF】DataGridに編集可能なComboBoxを表示するには?
    art55 (07/16)
  • 【WPF】DataGridに編集可能なComboBoxを表示するには?
    arisa (07/16)
  • 【キーボード】6年前のRealForceを復活させることはできる!?その3
    art55 (05/22)
  • 【キーボード】6年前のRealForceを復活させることはできる!?その3
    分解大好き (05/18)
  • 【.NET Framework 4.5】 IListがIReadOnlyListを継承してない理由。
    art55 (02/04)
  • 【.NET Framework 4.5】 IListがIReadOnlyListを継承してない理由。
    Gen (02/04)
  • 【キーボード】RealForce が壊れて帰ってきた。
    art55 (04/29)
  • 【.NET Framework 4.5】 IListがIReadOnlyListを継承してない理由。
    art55 (02/23)
  • 【.NET Framework 4.5】 IListがIReadOnlyListを継承してない理由。
    かるあ (02/22)
  • 【C#】Dictionaryの実装・データ構造・アルゴリズムを観察する。
    art55 (01/16)

recent trackback

recommend

recommend

recommend

C#プログラマのための.NETアプリケーション最適化技法 (Programmer's SELECTION)
C#プログラマのための.NETアプリケーション最適化技法 (Programmer's SELECTION) (JUGEMレビュー »)
Sasha Goldshtein,Dima Zurbalev,Ido Flatow,サシャ・ゴルドシュタイン,ディマ・ズルバレフ,イド・フラトー

recommend

ろんりと集合
ろんりと集合 (JUGEMレビュー »)
中内 伸光
とてもわかりやすいです。

recommend

recommend

シャノン・ノイマン・ディジタル世界
シャノン・ノイマン・ディジタル世界 (JUGEMレビュー »)
市川 忠男
4章がリレーショナルデータベースな内容になってます。ページ数があまりありませんが、ポイントがものすごく的確にまとまっていて、感動します。

recommend

recommend

東プレ Realforce91UBK-S 静音キーボード 静電容量無接点方式 変荷重 ブラック NG01BS
東プレ Realforce91UBK-S 静音キーボード 静電容量無接点方式 変荷重 ブラック NG01BS (JUGEMレビュー »)

テンキーレス、静音のRealForce91UBK-S。スコスコ感がたまらなく気持ちいいです。家と会社で2台持ってます。

recommend

recommend

プログラミング.NET Framework 第4版 (プログラミングシリーズ)
プログラミング.NET Framework 第4版 (プログラミングシリーズ) (JUGEMレビュー »)
Jeffrey Richter
発売予定美 2013年10月10日。.NET Frameworkとお付き合いする人のバイブルですね。

recommend

recommend

キャット・シッターの君に。
キャット・シッターの君に。 (JUGEMレビュー »)
喜多嶋 隆
私のイラストレータデビュー本です。

recommend

Essential .NET ― 共通言語ランタイムの本質
Essential .NET ― 共通言語ランタイムの本質 (JUGEMレビュー »)
ドン・ボックス,クリス・セルズ,Don Box,Chris Sells,吉松 史彰

links

profile

search this site.

others

mobile

qrcode

powered

無料ブログ作成サービス JUGEM