PRISM。 RegisterInstance的任务

时间:2010-12-16 21:46:45

标签: .net silverlight-4.0 c#-4.0 unity-container prism

我想了解一些事情。

我有“服务”silverlight应用程序项目,其中包含Module类和下一个代码行到其“Initialize”方法,以便注册类型:

unityContainer.RegisterInstance<IService>(instance);

我还有另一个“控件”Silverlight应用程序项目。模块被描述为“catalog.xaml”文件:

<Modularity:ModuleInfo
    Ref="Service.xap"
    ModuleName="ServiceModule"
    ModuleType="Service.ModuleDefinitions.Module, Service, Version=1.0.0.0">
</Modularity:ModuleInfo>

您可以在下面找到“Bootstrapper”代码:

protected override IModuleCatalog CreateModuleCatalog()
{
    Uri uri = new Uri("catalog.xaml", UriKind.Relative);
    ModuleCatalog moduleCatalog = Microsoft.Practices.Prism.Modularity.ModuleCatalog.CreateFromXaml(uri);
    // NOTE: State of "ServiceModule" is "NotStarted" here...
    return moduleCatalog;
}

protected override DependencyObject CreateShell()
{
    Shell shell = new Shell();
    Application.Current.RootVisual = shell;
    IRegionManager regionManager = Container.Resolve<IRegionManager>();
    regionManager.RegisterViewWithRegion("MainRegion", typeof(MainView));
    return shell;
}

一个ViewModel类(进入“Controls”项目)包含对IService接口的引用,该接口必须注册到“服务”项目的Modul类中。

在程序调试期间,

CreateModuleCatalog()和CreateShell()方法执行时没有任何问题,但在执行注册IService的Initialize()方法之前我遇到了异常。

错误消息:“当前类型Service.ServiceReference.IService是一个接口,无法构造。您是否缺少类型映射?”

我认为我只需要一次注册/映射类型,如果我已经完成了Module类的Service项目,那么我就不必再做它了。再次控制项目。

我需要帮助才能了解上述情况:)

1 个答案:

答案 0 :(得分:3)

在尝试从容器中解析对象之前,您确定此代码是否正在执行?

unityContainer.RegisterInstance<IService>(instance);

正如here所解释的那样,将RegisterInstance方法与接口一起使用会自动建立映射,因此您无需明确地进行映射。

但是,如果您尝试在没有首先建立type mapping的情况下解析接口,您将收到错误,因为无法实例化接口。