有一个问题找到一个直接的答案,虽然这可能是我无法搜索正确的条款。
我想知道的是,在使用IoC.Get()的caliburn micro中;返回对该现有对象的引用,并且(我假设)如果没有该对象的实例,IoC将创建一个
另外,如果我是通过new手动创建一个实例,以后再使用ioc.get,这会返回我手动创建的同一个实例还是一个新实例?
我问的原因是,我正在编写一个WPF应用程序,我正在使用IoC.Get最初加载我的viewmodels,现在由于重新设计我希望能够创建一组全新的视图,所以我的父视图模型看起来类似于:
public ProjectContainerViewModel()
{
_containersListModel = IoC.Get<ContainersListViewModel>();
_orderedItemListModel = IoC.Get<ItemsOrderedViewModel>();
_packageListModel = IoC.Get<PackagesListViewModel>();
}
我可以使用_containersListModel = new ContainersListModel()在这里创建新实例。从那时起与IOC获得相同的实例?
编辑: 我正在使用此处找到的引导程序:https://caliburnmicro.codeplex.com/wikipage?title=Customizing%20The%20Bootstrapper
定义容器,我也在类的开头用[Export(typeof(ContainersListViewModel))]标记我的viewmodels。
答案 0 :(得分:4)
Caliburn Micro中IoC
的默认实现是一个简单的“新”,但IoC是一个可以插入(并且可能需要)自己的IoC容器的扩展点。为此,您必须在引导程序中覆盖以下函数:
protected virtual void BuildUp(object instance);
protected virtual object GetInstance(Type service, string key);
并使用您首选的IoC容器编写它们以构建对象。
即使您认为在第一步中不需要IoC容器,调用IoC.Get
来构建对象将使您的代码在将来更容易移植。