2012-01-30 7 views
2

私は今Microsoft Unity 2でプレイしており、ファイルシステムからアセンブリをロードするようコンテナを構成できるかどうかを知る必要があります。 (右のアセンブリへのすべてのマッピングを含む)設定ファイルからロードするか、型オブジェクトをプログラマチックに登録します。私は本質的にプラグインを読み込むためにこれが必要です。すべてのプラグインは同じ契約インタフェースを実装しています。私が達成したいのは、メインのアプリケーションフォルダに新しいアセンブリ(プラグイン)をドロップすることができ、それがUnityによって自動的に検出されるということです。それが可能ですか、それともMEFを使用する必要がありますか?Microsoft Unityとダイナミックタイプ/アセンブリのロード

お手数をおかけしますようお願い申し上げます。ありがとうございます。

答えて

3

Unityは、そのままの動作をサポートしていません。しかし、それを実装することは困難ではありません。

FileSystemWatcherは、プラグインフォルダに新しいアセンブリをドロップするたびにアプリケーションに通知することができます。それでは、この新しいファイルを使って何をすればいいのかということだけが慣習の問題です。 DLLを読み込むにはAssembly.Loadを使用してください。次に、あなたのインターフェイスの実装

assembly.GetExportedTypes().Where(t => typeof(IMyInterface).IsAssignableFrom(t))

のためにそれをスキャンすることができ、その後、あなたは、コンテナを使用して実装を登録する必要があります。

このサービスはインフラストラクチャの一部であるため、コンテナを参照するのはOKですが、それ以外の場合は避けてください。

+0

セバスチャン – Batiatto