Wpf 为什么我会出现这个错误;当前类型,…,是一个接口,无法构造。是否缺少类型映射?“;

Wpf 为什么我会出现这个错误;当前类型,…,是一个接口,无法构造。是否缺少类型映射?“;,wpf,dependency-injection,prism,Wpf,Dependency Injection,Prism,我使用的是Prism 6.3,Unity容器4,WPF。当我试图解析一个类时,我得到的错误是“当前类型…是一个接口,无法构造…”,但在我看来,我已经正确地映射了所有内容。我以前用过这个,没有问题……我很困惑 我有一个模块,其中包含一个名为ICurrentWorkingEmail的接口,该接口映射到一个CurrentWorkingModel类。我创建了模块类(IModule)BizCoreModule,这些类型在容器中注册 public class BizCoreModule : IModule

我使用的是Prism 6.3,Unity容器4,WPF。当我试图解析一个类时,我得到的错误是“当前类型…是一个接口,无法构造…”,但在我看来,我已经正确地映射了所有内容。我以前用过这个,没有问题……我很困惑

我有一个模块,其中包含一个名为ICurrentWorkingEmail的接口,该接口映射到一个CurrentWorkingModel类。我创建了模块类(IModule)BizCoreModule,这些类型在容器中注册

public class BizCoreModule : IModule
{
    private IUnityContainer _container;
    public BizCoreModule(IUnityContainer container)
    {
        _container = container;
    }
    public void Initialize()
    {
        _container.RegisterType<ICurrentWorkingEmail, CurrentWorkingEmail>(new ContainerControlledLifetimeManager());
    }

}
调试时,我将容器注入视图模型,并尝试在构造函数中解析CurrentWorkingEmail类(通常不会这样做)

私有IUnityContainer\u容器;
公共搜索视图模型(IUnityContainer容器)
{
_容器=容器;
var currentWorkingEmail=_container.Resolve();
}

该错误发生在_container.Resolve()上。

将问题指向了我。在目录启动之前,我正在尝试解析ICurrentWorkingEmail。我没有意识到shell将在目录启动之前加载…我试图在shell的viewmodel中使用CurrentWorkingEmail。为了解决这个问题,我将shell组件移动到它自己的模块中,并使用区域管理器将其注入。

调试时,如果在
BizCoreModule.Initialize
,是否在
SearchViewModel.SearchViewModel
之前到达它?还有,容器实例是相同的吗?谢谢Haukinger,我按照你的建议做了,并且意识到在它实际注册之前我正在尝试解决它。我试图在主窗口中解决这个问题,但显然主窗口在模块目录注册之前加载。因此,解决方案是将这些组件移动到模块中,这可能是我无论如何都应该做的。谢谢你的帮助
protected override IModuleCatalog CreateModuleCatalog()
{
    ModuleCatalog catalog = new ModuleCatalog();
    catalog.AddModule(typeof(DataLayerModule));
    catalog.AddModule(typeof(BizCoreModule));
    return catalog;
}
    private IUnityContainer _container;
    public SearchViewModel(IUnityContainer container)
    {
        _container = container;
        var currentWorkingEmail = _container.Resolve<ICurrentWorkingEmail>();
    }