0

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

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

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

当我将注册从引导程序移动到C模块的构造函数内部并使用 inject 在那里注册时,找到了模块,并且注册成功。IUnityContainer

因此,似乎注册顺序和位置以某种方式影响了模块加载,并且毫无例外地默默地这样做。现在我正在使用“在该模块的构造函数中从我的模块程序集中注册类型”方法,但这感觉像是一种解决方法。

这是“这样做的方法”吗?这是一个已知的限制或错误吗?

4

1 回答 1

1

不知道为什么会发生这种情况,但是“在模块Initialize方法中的模块中注册类型”是要走的路。这就是模块的工作——注册它为应用程序带来的类型。

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

于 2016-10-31T18:05:05.333 回答