[.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 / Win8.1 ストアアプリ】 HttpClient で TLS 1.1 / 1.2 に対応するには(2018.06.17)
- 【VS2017 15.7pv2】 XAML のランタイム ツールに 「ヒートマップ」 が増えた(2018.03.28)
- 【.NET Core】 プロジェクトを作ると 「project.assets.json が見つかりません」 エラー(2018.02.10)
- 【#UWP】 ビットマップの表示色を変える (Win2D.uwp 経由で Direct2D を使う)(2017.08.23)
- 【#UWP】 CompactOverlay モード: Picture in Picture というか、「最前面に表示」するウィンドウを作る(2017.08.16)
この記事へのコメントは終了しました。
コメント