我有兴趣在我的项目中实现一个IoC容器,但我还没有看到一个能够满足我需要的示例。IoC容器对象范围
下面是情况,我的应用程序是在WPF中构建的,并使用MVVM模式为红外视频格式创建播放器。在这种格式下,每个视频实际上由多个“子帧”组成(将其视为以多个快门速度同时捕捉,以增加数据的动态范围),每个视频都显示在TabControl中。我想使用IoC容器来帮助我为每个选项卡创建ViewModels,但我有两个问题。
我需要一种方法在表示子我创建一个视图模型为不能由IoC容器创建,因为它已经存在的视图模型的依赖,这样至少一个对象来传递。
我有视图内的用户控件有自己的ViewModels子视图,所以这些ViewModels也需要由IoC容器创建。这个问题是,尽管控件(和它们的ViewModel)具有不同的关注点,但它们并不完全独立,因此它们使用了一些协调对象。不幸的是,在我见过的所有示例中,您可以让IoC容器创建一个新的依赖项实例或具有一个单例,但我需要的是在创建子视图模型期间受控范围内的单个实例ViewModel 。
这是很多文字,所以这里是一些代码,显示我在做什么,我想做什么。
我现在
有什么在打开电影代码:
foreach (var subframe in movieFile)
{
// Subframes is the ObservableCollection that the TabControl is bound to
Subframes.Add(new SubframeViewModel(subframe));
}
在SubframeViewModel:
我想有在不改变现有sematics
在打开电影代码:
foreach (var subframe in movieFile)
{
Subframes.Add(container.Resolve<SubframeViewModel>());
}
在SubframeViewModel:
public SubframeViewModel(ISubframe subframe, ImageViewModel imageModel,
FrameControlViewModel frameModel)
{
_subframe = subframe;
ImageViewModel = imageModel;
FrameControlViewModel = frameModel;
}
在现实中,也有更多的协调和视图模型对象参与,但图案是相同的。这就是说,我认为你可以看到为什么我对这里的IoC容器感兴趣。
我认为我的场景应该是相当常见的,但我不确定,我不想浪费我的时间,试图将一个方形的钉子插入圆孔,所以这里是我的问题。任何/所有的IoC容器可以做到这一点吗?如果没有,你可以指向我的重构,这将改善我的代码,并使IoC工作?
嗯会误解你的问题在二读 - 反正HTH! – 2009-11-19 21:13:07
无论这是否完全回答了我的所有问题,现在我指出了正确的方向。我可以肯定地看到,我可以如何使这一切更干净地工作。谢谢您的帮助。 – 2009-11-20 14:03:48
看着Autofac文档,它看起来像我是否为每个子帧创建了一个嵌套容器并将FrameController标记为ContainerScoped,我所需要做的就是使用您在那里指定子帧并满足所有需求。这似乎是一个合理的事情吗? – 2009-11-20 14:13:43