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

时间:2016-10-31 16:18:38

标签: wpf unity-container prism bootstrapping prism-6

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

我在程序集中有两个其他模块 A B 。这些模块由引导程序的DirectoryModuleCatalog方法中使用的InitializeModules()找到;汇编 C 的模块不是。

当我删除有问题的注册时,会找到 C 。当我将界面和目标类移动到另一个程序集并重新添加注册时,再次找到 C

当我将注册从引导程序移动到 模块的构造函数内部并使用注入的IUnityContainer在那里注册时,模块是发现,注册成功。

因此,似乎注册顺序和位置以某种方式影响模块加载,并且无异常地静默执行。现在,我正在使用“模块的构造函数中我的模块程序集中的寄存器类型”方法,但这感觉就像一个解决方法。

这是“做到这一点的方式”吗?这是一个已知的限制还是错误?

1 个答案:

答案 0 :(得分:1)

不确定为什么会发生这种情况,但"在模块中注册类型Initialize方法"是要走的路。这是模块的工作 - 注册它带给应用程序的类型。

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