Caliburn Micro IoC.Get

时间:2014-01-28 15:21:56

标签: c# wpf ioc-container caliburn.micro

有一个问题找到一个直接的答案,虽然这可能是我无法搜索正确的条款。

我想知道的是,在使用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。

1 个答案:

答案 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来构建对象将使您的代码在将来更容易移植。