为什么 Unity 注册会破坏 Prism 找到我的模块的能力?
Why does a Unity registration break Prism's ability to find my module?
在 UnityBootstrapper
的子 class 中,我在 class 的 ConfigureContainer()
方法中注册了一个类型。对于这个问题,接口类型和实现 class 是无关紧要的;它们存在并且可以解决。相关的是接口和类型是在包含我要加载的模块的同一个程序集(我们称之为 C)中定义的。
我在程序集 A 和 B 中还有另外两个模块。这些模块由引导程序的 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" 是可行的方法。这是模块的工作 - 注册它带给应用程序的类型。
通常情况下,您不会引用模块 - 因为任何一组模块都可以在运行时进入应用程序 - 因此您无论如何都不能在模块外部注册模块的类型。例如,如果您有一个要在一个模块中使用的接口,但在另一个模块中有它的实现,请将该接口移到第三个程序集中(很可能不包含模块定义)。
在 UnityBootstrapper
的子 class 中,我在 class 的 ConfigureContainer()
方法中注册了一个类型。对于这个问题,接口类型和实现 class 是无关紧要的;它们存在并且可以解决。相关的是接口和类型是在包含我要加载的模块的同一个程序集(我们称之为 C)中定义的。
我在程序集 A 和 B 中还有另外两个模块。这些模块由引导程序的 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" 是可行的方法。这是模块的工作 - 注册它带给应用程序的类型。
通常情况下,您不会引用模块 - 因为任何一组模块都可以在运行时进入应用程序 - 因此您无论如何都不能在模块外部注册模块的类型。例如,如果您有一个要在一个模块中使用的接口,但在另一个模块中有它的实现,请将该接口移到第三个程序集中(很可能不包含模块定义)。