Silverlight 使用复合应用程序库向不同的服务注册相同的视图

Silverlight 使用复合应用程序库向不同的服务注册相同的视图,silverlight,view,Silverlight,View,我正在使用Silverlight的复合应用程序库,我需要向我的区域添加三个“区域”。这些“区域”基本上都具有相同的视图和表示模型。(我从StockTraderRI应用程序中得到这些词。如果我错了,请纠正我。)我唯一的区别是从哪里获得数据,因此我希望为每个“区域”提供不同的服务 目前,我可以通过以下操作在“Rights区域”中初始化视图: public void Initialize() { RegisterViewsAndServices(); this.regionMan

我正在使用Silverlight的复合应用程序库,我需要向我的区域添加三个“区域”。这些“区域”基本上都具有相同的视图和表示模型。(我从StockTraderRI应用程序中得到这些词。如果我错了,请纠正我。)我唯一的区别是从哪里获得数据,因此我希望为每个“区域”提供不同的服务

目前,我可以通过以下操作在“Rights区域”中初始化视图:

public void Initialize()
{
     RegisterViewsAndServices();

     this.regionManager.Regions["MainRegion"].Add(new DefaultViewUI());
     this.regionManager.RegisterViewWithRegion("RightsRegion", () => container.Resolve<ISecurityTreePresentationModel>().View);
}

private void RegisterViewsAndServices()
{
     container.RegisterType<ITreeViewService, EntityTypesService>(new ContainerControlledLifetimeManager());
     container.RegisterType<ISecurityTreeView, SecurityTreeView>();
     container.RegisterType<ISecurityTreePresentationModel, SecurityTreePresentationModel>();
}
public void Initialize()
{
RegisterViewsAndServices();
this.regionManager.Regions[“MainRegion”].Add(新的DefaultViewUI());
this.regionManager.RegisterViewWithRegion(“RightsRegion”,()=>container.Resolve().View);
}
私有void RegisterViewsAndServices()
{
RegisterType(新的ContainerControlledLifetimeManager());
container.RegisterType();
container.RegisterType();
}
我想我可以在“RightsRegion”中用我的LocationsService注册此视图的另一个副本,但这似乎覆盖了我的EntityTypesService


如何将三个相同的视图和非常相似的表示模型注册到我的“RightsRegion”中,以便它们各自使用不同的服务?

尝试为每个视图创建一个子容器

var container = myContainer.CreateChildContainer();
container.RegisterType<ITreeViewService, EntityTypesService>(new ContainerControlledLifetimeManager());
container.RegisterType<ISecurityTreeView, SecurityTreeView>();
container.RegisterType<ISecurityTreePresentationModel, SecurityTreePresentationModel>();
var container=myContainer.CreateChildContainer();
RegisterType(新的ContainerControlledLifetimeManager());
container.RegisterType();
container.RegisterType();
但是,如果您使用的是容器控制的生存期,请不要忘记处理子容器(您也可以使用外部控制的生存期管理器)

我还想补充一点,您应该避免处理IModule中的区域。你的IModule很快就会变得一团糟。我建议制作一个控制器(参见StockTrader RI)来处理这样的事情


-Jer

或者,如果只想使用一个容器,可以使用命名注册:

container.RegisterType<ITheInterface, TheInstance1>("Instance 1");
container.RegisterType<ITheInterface, TheInstance2>("Instance 2");
container.RegisterType(“实例1”);
RegisterType(“实例2”);

感谢您的回答和建议。这有助于我现在开始行动,并知道我应该去哪里。