Не уверен насчет autofac или Caliburn (может все еще применяться), но когда он придет в Unity Container, я зарегистрирую ViewModel только в том случае, если ...
Мне нужно утилизировать его при утилизации контейнераиз.Вы можете создать менеджер времени жизни, который будет хранить вновь созданный (не одноэлементный) экземпляр модели представления.
container.RegisterType<MyViewModel>(new DisposeableInstanceLifetimeManager());
...
container.Resolve<MyViewModel>(); // here all dependencies will get injected
...
container.Dispose();
Если вы хотите обмениваться данными, я, как правило, создаю вспомогательный (дочерний) контейнер и регистрирую модель как одноэлементную, и несколько моделей представлений совместно используют одну и ту же модель.
var child = container.CreateChildContainer();
child.RegisterInstance(model, new ContainerControlledLifetimeManager());
child.Resolve<MyViewModel1>();
child.Resolve<MyViewModel2>(); // both can share the model instance
(Примечание: в Unity все зависимости внедряются при использовании Resolve
в ViewModel, даже если он не зарегистрирован в контейнере).
В противном случае, если вам не нужен одноэлементный ViewModel (хотя я не могу вспомнить, когда это произойдетбыло бы полезно) Я чувствую, что добавление ViewModel в контейнер просто добавляет больше кода без пользы.