2016-10-31 15 views
0

UnityBootstrapperの私のサブクラスでは、クラスのConfigureContainer()メソッドでタイプを登録します。この質問のために、インターフェイスタイプと実装クラスは無関係です。それらは存在し、解決することができます。関連するのは、インターフェイスとタイプが、ロードするモジュールを含む同じアセンブリ(C)に定義されているということです。Unityの登録がPrismの自分のモジュールを見つけるのを妨げるのはなぜですか?

私はアセンブリ内に2つの他のモジュールを持っていますBです。これらのモジュールは、ブートストラップのInitializeModules()メソッドで使用されるDirectoryModuleCatalogによって検出されます。アセンブリのモジュールではありません。

問題のある登録を削除すると、Cが見つかりました。インターフェイスとターゲットクラスを別のアセンブリに移動して登録を再追加すると、Cが再び見つかります。私は内部ブートストラップからCのモジュールのコンストラクタを登録を移動し、注入IUnityContainerを使用してそこに登録する

、モジュールが見出され、登録が成功しています。

したがって、登録の順序と場所が何らかの理由でモジュールの読み込みに影響を与えているようで、例外なく静かに実行しているようです。現時点では、私は "モジュールのコンストラクタでのモジュールのアセンブリからのレジスタ型"アプローチを採用していますが、これは回避策のように感じられます。

「これを行う方法」ですか?これは既知の制限またはバグですか?

答えて

1

これはなぜ起こるのかわかりませんが、 "モジュールのモジュールのレジスタタイプはInitializeメソッド"になります。これがモジュールの仕事です。アプリケーションにもたらすタイプを登録します。

通常、モジュールの参照は実行時にアプリに入るので、モジュールを参照しないため、モジュールのタイプをモジュール外に登録することはできません。たとえば、あるモジュールで使用するインターフェイスを別のモジュールに実装する場合は、そのインターフェイスを3番目のアセンブリ(モジュール定義を含まない可能性が高い)に移動します。

+0

振り返ってみると意味があります。私たちのモジュールを削除する必要がある場合、登録を「後ろに」残すことは望ましくありません。モジュールを「見つけられない」代わりに例外や何かをスローしたかったら – Kit

関連する問題