Если у вас возникли проблемы с поиском правильного ответа на этот вопрос, хотя это может быть неудачным с моей стороны для поиска правильных условий.Caliburn Micro IoC.Get
Что я хочу знать, в микросхеме caliburn с использованием IoC.Get(); возвращает ссылку на этот существующий объект, а также (я предполагаю), если нет экземпляра этого объекта, IoC создаст один
Кроме того, что, если бы я должен был создать экземпляр вручную через новый, а затем и используемый ioc. get, вернет ли тот же экземпляр, который я создал вручную или новый?
Причина, по которой я спрашиваю это, я пишу приложение WPF и im, используя IoC.Get, чтобы загрузить мои модели просмотра изначально, теперь из-за редизайна мне хотелось бы создать совершенно новый набор этих представлений , так что мой родитель ViewModel выглядит примерно так:
public ProjectContainerViewModel()
{
_containersListModel = IoC.Get<ContainersListViewModel>();
_orderedItemListModel = IoC.Get<ItemsOrderedViewModel>();
_packageListModel = IoC.Get<PackagesListViewModel>();
}
Может я вместо того, чтобы создавать новые экземпляры здесь, используя _containersListModel = новый ContainersListModel(). и с тех пор получить тот же самый экземпляр с IOC?
EDIT: Я использую загрузчик нашел здесь: https://caliburnmicro.codeplex.com/wikipage?title=Customizing%20The%20Bootstrapper
который определяет контейнер, я также маркировка мои ViewModels с [Export (TypeOf (ContainersListViewModel))] в начале класса.
Если вы «новый» новый экземпляр, контейнер IoC не будет знать об этом, если вы не добавите (или не измените) одно из своих привязок. Кроме того, в зависимости от привязок вы можете получить новый экземпляр для каждого вызова 'IoC.Get()' или одного и того же экземпляра снова и снова (singleton), в зависимости от способа привязки реализации. 1) Что вы используете для своего контейнера DI (например, Caliburn.Micro 'SimpleContainer' или что-то еще)? 2) Как вы создаете привязки контейнера (или разрешаете ли вы разрешать «автоматически»)? – Steve
Кроме того, вы говорите, что хотите «создать совершенно новый набор этих представлений» - это не имеет ничего общего с режимами просмотра. Вы хотите создать новый набор режимов просмотра? Просто убедитесь, что контейнер IoC не возвращает одноточие, а затем просто вызовите 'IoC.Get()' еще раз, чтобы получить новый. – Steve
Я использую CompositionContainer, который является частью запуска CM, а также в режимах просмотра отмечены [Export (typeof (ContainersListViewModel))]. Поэтому, чтобы ответить на ваши вопросы, я не уверен, что он сейчас делает, и именно поэтому я спрашиваю, потому что я не могу узнать :( – Ben