【Unity】LifetimeManagerのまとめ。

  • 2009.02.20 Friday
  • 01:52
Unity LifetimeManager

Source and Project

UnityのLifetimeManagerオブジェクトのメソッドをそれぞれまとめてみました。

TransientLifetimeManager
オブジェクトの管理方法
 管理しない。
GetValueメソッド
 常にnullを返す。
SetValueメソッド
 特に何もしない。
RemoveValueメソッド
 特に何もしない。
備考
 LifetimeManager指定なしのRegisterTypeメソッドとRegisterInstanceは
 このLifetimeManagerが指定される。


PerThreadLifetimeManager
オブジェクトの管理方法
 スレッド毎にオブジェクトを管理する(強い参照)
GetValueメソッド
 コンテナに関連付けられているスレッドとペアになっているオブジェクトを返す。
SetValueメソッド
 関連付けられているスレッド毎にオブジェクトを保持する。
RemoveValueメソッド
 特に何もしない。


ExternallyControlledLifetimeManager
オブジェクトの管理方法
 オブジェクトを弱い参照により管理する。
GetValueメソッド
 管理するオブジェクトの強い参照を返す。ただしGC回収後はnullを返す。
SetValueメソッド
 指定したオブジェクトの弱い参照で管理対象として保持する。
RemoveValueメソッド
 特に何もしない。


ContainerControlledLifetimeManager
オブジェクトの管理方法
 コンテナ毎にオブジェクトを管理する(強い参照)
GetValueメソッド
 管理するオブジェクトを返す。
SetValueメソッド
 指定したオブジェクトを管理対象として保持する。
RemoveValueメソッド
 管理するオブジェクトがIDisposableを継承している場合、Disposeメソッドを呼び出す。
Disposeメソッド
 RemoveValueメソッドと同じ


これらの全部試してみるとは、面・・・諸事情により割愛されていただきます。ContainerControlledLifetimeManagerだけちょろんと試してみました。そろそろ、この試してみましたモードは飽きてきました(笑)

 class Program
 {
  static void Main()
  {
   IUnityContainer container = new UnityContainer();
   var lifetimeManager = new ContainerControlledLifetimeManager();
   container.RegisterType<IHoge, HogeAImpl>(lifetimeManager);

   // コンテナから取り出したオブジェクトとlifetimeManagerから取り出したオブジェクトの比較。
   IHoge hoge = container.Resolve<IHoge>();
   Console.WriteLine(hoge.GetHashCode() == lifetimeManager.GetValue().GetHashCode());

   // SetValueで管理するインスタンスを入れ替える。
   IHoge hoge2 = new HogeAImpl();
   lifetimeManager.SetValue(hoge2);
   Console.WriteLine(hoge.GetHashCode() == lifetimeManager.GetValue().GetHashCode());
   Console.WriteLine(lifetimeManager.GetValue().GetHashCode() == container.Resolve<IHoge>().GetHashCode());

   // 管理するインスタンスをいったん破棄する。
   lifetimeManager.RemoveValue();
   Console.WriteLine(hoge2.GetHashCode() == container.Resolve<IHoge>().GetHashCode());
  }
 }

 public interface IHoge
 {
  void Execute();
 }

 public class HogeAImpl : IHoge
 {
  public void Execute()
  {
   Console.WriteLine("Hey");
  }
 }

はい。実行!

Unity LifetimeManager

lifetimeManagerからGetValueメソッドで管理中のオブジェクトを取り出したり、SetValueメソッドで入れ替えたりとなんだかとっても奇妙な感じですが(笑)うごいてますねー。あたりまえですがー。

Source and Project
コメント
コメントする








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

calendar

S M T W T F S
1234567
891011121314
15161718192021
22232425262728
293031    
<< December 2019 >>

あわせて読みたい

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

selected entries

categories

archives

recent comment

  • 【キーボード】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)
  • 【C#】Dictionaryの実装・データ構造・アルゴリズムを観察する。
    karuakun (01/16)
  • 【NetOffice】【Excel】死なないExcelプロセスをKillする。
    art55 (12/05)

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