在我的UnityBootstrapper
子类中,我在类的ConfigureContainer()
方法中注册了一个类型。对于这个问题,接口类型和实现类是无关紧要的;它们存在并且可以解决。相关的是接口和类型在同一个程序集中定义(我们称之为 C ),其中包含我要加载的模块。
我在程序集中有两个其他模块 A 和 B 。这些模块由引导程序的DirectoryModuleCatalog
方法中使用的InitializeModules()
找到;汇编 C 的模块不是。
当我删除有问题的注册时,会找到 C 。当我将界面和目标类移动到另一个程序集并重新添加注册时,再次找到 C 。
当我将注册从引导程序移动到 模块的构造函数内部并使用注入的IUnityContainer
在那里注册时,模块是发现,注册成功。
因此,似乎注册顺序和位置以某种方式影响模块加载,并且无异常地静默执行。现在,我正在使用“模块的构造函数中我的模块程序集中的寄存器类型”方法,但这感觉就像一个解决方法。
这是“做到这一点的方式”吗?这是一个已知的限制还是错误?
答案 0 :(得分:1)
不确定为什么会发生这种情况,但"在模块中注册类型Initialize
方法"是要走的路。这是模块的工作 - 注册它带给应用程序的类型。
通常,您不会引用模块 - 因为任何模块都可以在运行时进入应用程序 - 因此您无法在模块外注册模块类型。例如,如果您有一个要在一个模块中使用但在另一个模块中实现它的接口,请在第三个程序集中移动该接口(很可能不包含模块定义)。