« [.NET] Unity Application Block を使ってみる (1) | トップページ | [.NET] Unity Application Block を使ってみる (3) »

2008年9月22日 (月)

[.NET] Unity Application Block を使ってみる (2)

( その1 ← )

付いてきたサンプルコードでは、 Main() メソッド中で、 こんなふうにしてオブジェクトを組み立てています。

IUnityContainer container = new UnityContainer()
  .RegisterType<ILogger, TraceLogger>()
  .RegisterType<IStoplightTimer, AnotherRealTimeTimer>()
  .RegisterType<IStoplightPresenter, StoplightPresenter>();

しかしこれでは、 くっつけるモノを替えるには、 コンパイルしなおす必要があります。
というわけで、 組み立て方法を xml ファイルに外出ししたいわけです。 ( たいがいの DI コンテナは、 そうなってるはずです。 )

しかし、 英文ドキュメントは読む気が起きないので、 ぐぐる様頼り。 f(^^;
見付けた記事通りにやって、 できました。 (^^;
→ 参考記事: @IT - Enterprise Library 4.0 概説 ~ 新しいオブジェクト生成機構で EntLib はこう変わる! (2008/06/17)

まず、 上のコードを、 次のように変えます。

IUnityContainer container = new UnityContainer();
UnityConfigurationSection section
  = (UnityConfigurationSection)
    ConfigurationManager.GetSection("unity");
section.Containers["StoplightContainer"].Configure(container);

そして、 App.config には、 次のように記述します。 ( 前後をかなり省略。 詳しくは、 上記記事と付属のオンラインヘルプを。 )

  <container name="StoplightContainer">
    <types>
      <type
        type="StopLight.ServiceInterfaces.ILogger, StopLight"
 mapTo="StopLight.ServiceImplementations.TraceLogger, StopLight"></type>
      <type
 type="StopLight.ServiceInterfaces.IStoplightTimer, StopLight"
 mapTo="StoplightTimer.AnotherRealTimeTimer, StoplightTimer"></type>
      <type
 type="StopLight.UI.IStoplightPresenter, StopLight"
 mapTo="StopLight.UI.StoplightPresenter, StopLight"></type>
    </types>
  </container>

これで見事、 オブジェクトが組み上げられて、 ちゃんと動いてくれました。 (^^;
プロジェクトファイルやソースコードの情報は実行時には使えないので、 その分、 xml の記述が多くなりますが、 コンパイルしなおすことなく組み替えられるのは魅力です。

( → その3 )

|

« [.NET] Unity Application Block を使ってみる (1) | トップページ | [.NET] Unity Application Block を使ってみる (3) »

プログラミング」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: [.NET] Unity Application Block を使ってみる (2):

» [.NET] Unity Application Block を使ってみる (3) [biac の それさえもおそらくは幸せな日々@nifty]
ということで、 IoC ( 制御の反転 ) の実装をやってみる。…あっさり成功。# これもまぁ、 あたりまえというか、 DI コンテナなら出来てくれんとイカンのですが f(^^; で。 IoC ってのは…例えば、 アセンブリ ( dll ) が、 [本体] と [プラグイン] に分かれていて、 [本体] から [プラグ... [続きを読む]

受信: 2008年9月23日 (火) 18時36分

« [.NET] Unity Application Block を使ってみる (1) | トップページ | [.NET] Unity Application Block を使ってみる (3) »