我想了解一些事情。
我有“服务”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项目,那么我就不必再做它了。再次控制项目。
我需要帮助才能了解上述情况:)
答案 0 :(得分:3)
在尝试从容器中解析对象之前,您确定此代码是否正在执行?
unityContainer.RegisterInstance<IService>(instance);
正如here所解释的那样,将RegisterInstance方法与接口一起使用会自动建立映射,因此您无需明确地进行映射。
但是,如果您尝试在没有首先建立type mapping的情况下解析接口,您将收到错误,因为无法实例化接口。