为什么 Unity 注册会破坏 Prism 找到我的模块的能力?

Why does a Unity registration break Prism's ability to find my module?

UnityBootstrapper 的子 class 中,我在 class 的 ConfigureContainer() 方法中注册了一个类型。对于这个问题,接口类型和实现 class 是无关紧要的;它们存在并且可以解决。相关的是接口和类型是在包含我要加载的模块的同一个程序集(我们称之为 C)中定义的。

我在程序集 AB 中还有另外两个模块。这些模块由引导程序的 InitializeModules() 方法中使用的 DirectoryModuleCatalog 找到;汇编C的模块不是.

当我删除有问题的注册时,发现 C。当我将接口和目标 class 移动到另一个程序集并重新添加注册时,再次找到 C

当我将注册从引导程序移动到内部 C 模块的构造函数并使用注入的IUnityContainer,找到模块,注册成功

因此,注册顺序和位置似乎以某种方式影响了模块加载,而且无一例外地悄无声息地进行着。目前我正在使用 "register types from my module's assembly in that module's constructor" 方法,但这感觉像是一种解决方法。

这是"the way to do it"吗?这是已知的限制或错误吗?

不确定为什么会发生这种情况,但 "register types in the module in the modules Initialize method" 是可行的方法。这是模块的工作 - 注册它带给应用程序的类型。

通常情况下,您不会引用模块 - 因为任何一组模块都可以在运行时进入应用程序 - 因此您无论如何都不能在模块外部注册模块的类型。例如,如果您有一个要在一个模块中使用的接口,但在另一个模块中有它的实现,请将该接口移到第三个程序集中(很可能不包含模块定义)。