Unity(DI) Config - アセンブリパスの通し方(型の名前解決)
(以下の内容はUnityバージョン3.5.1404をもとに記述しています。)
型の名前解決をさせるためにUnityにアセンブリのパスを通す必要があります。 方法は主に2通り。
1. alias要素 を使用する方法
alias要素はalias属性とtype属性から成り立ち、特定クラスに対するパスを通します。
<alias alias="AliasName" type="TypeName" />
alias 属性
任意の名前を付けます。一般的には名前空間を省略した型名を指定すると思います。
type 属性
型の正式名を指定します。 書式は主に以下のようなものになります。
{型正式名}, {アセンブリ名}, Version={バージョン名}, Culture={Culture名}, PublicKeyToken={PublicKeyToken名}
アセンブリ名以降に何を書いてよいかよくわからないと思います。
そういう時はVisualStudioのプロジェクトに参照設定として追加し、そのプロジェクトファイルを見てみてください。
上記のReference Include=
に情報が書かれています。。
サンプル
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity"> <alias alias="IDbConnection" type="System.Data.IDbConnection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> <alias alias="IDbCommand" type="System.Data.IDbCommand, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> <alias alias="SqlConnection" type="System.Data.SqlClient.SqlConnection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> <alias alias="SqlCommand" type="System.Data.SqlClient.SqlCommand, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> </unity>
どんな時に使うか
主に既存ライブラリの特定クラスに対してのパスを通したいときに使用します。
2. assembly要素とnamespace要素を使用する方法
assembly要素とname属性でアセンブリに対するパスを通し、namespace要素とname属性で名前空間に対するパスを通します。
<assembly name="AssemblyName" /> <namespace name="NamespaceName" />
assembly要素の名前属性
アセンブリ名を指定します。
namespace要素とname属性
名前空間名を指定します。
サンプル
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity"> <assembly name="MyApplication1" /> <namespace name="MyApplication1" /> </unity>
どんな時に使うか
自身のプロジェクトなど、特定名前空間の複数の型に対してまとめてパスを通したいときに使用します。
参考
Unity公式ドキュメント
Specifying Types in the Configuration File
The Unity Configuration Schema
Unityの Configuring Unity > Design Time Configuration ドキュメントってどれが最新なのかよくわからんです。 上記はUnity2.0のドキュメントですがUnity3.5でも有効なようです。(少なくとも本稿の内容については)