.NETで作る!

.NETに関するあれこれ(C#、VB.NET)

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公式ドキュメント

Design-Time Configuration

Specifying Types in the Configuration File

The Unity Configuration Schema

Unityの Configuring Unity > Design Time Configuration ドキュメントってどれが最新なのかよくわからんです。 上記はUnity2.0のドキュメントですがUnity3.5でも有効なようです。(少なくとも本稿の内容については)

publickeytoken とかについて

@IT:インサイド .NET Framework [改訂版]第2回 アセンブリのアイデンティティ

. .