Как создается эта модель представления?
У меня есть простое приложение, но я не уверен, как создается моя ViewModel. Я предполагаю, что это из контейнера единства, но я не уверен и любопытен. Модуль инициализирует и регистрирует представление с регионом. Код представления имеет инициализированную в своем конструкторе ViewModel, а ViewModel вызывает некоторые ранее зарегистрированные сервисы.
Мой вопрос заключается в том, как ViewModel создается в коде View, когда я никогда не регистрировал тип ViewModel в контейнере Unity? Есть ли какая-то магия в методе RegisterViewWithRegion?
AlarmsModule.cs: это просто регистрирует представление с регионом
[Module(ModuleName = "AlarmsModule")]
public class AlarmsModule : IModule
{
[Dependency]
public IRegionManager regionManager { get; set; }
public void Initialize()
{
regionManager.RegisterViewWithRegion("AlarmsRegion", typeof(AlarmPanel.View));
}
}
View.xaml.cs:
public partial class View : UserControl
{
public View(ViewModel vm)
{
InitializeComponent();
DataContext = vm;
}
}
ViewModel.cs
public class ViewModel: DependencyObject
{
IEventAggregator _eventAggregator;
public ObservableCollection<IAlarmContainer> AlarmList { get; set; }
IAlarmService _alarmService;
public ViewModel(IAlarmService alarmService)
{
//Adding an alarm from the alarm service, which is injected into this viewModel
AlarmList = alarmService.AlarmList;
}
}
1 ответ
Модель представления создается контейнером единства в DoGetInstance
метод UnityServiceLocatorAdapter
класс в сборке Prism.Unity, которая в свою очередь вызывается RegisterViewWithRegion
метод через некоторые другие методы RegionViewRegistry
учебный класс.
Unity может автоматически разрешать тип модели представления при условии, что у него есть конструктор по умолчанию без параметров.
Вы можете проверить это самостоятельно, используя следующий код:
var view = unityContainer.Resolve(typeof(View), null); //will automatically resolve the view model type and inject the view with an instance of it