В чем разница между Container.Resolve<ViewA>()
и new ViewA()
?
Ничего особенного (кроме new
, всегда возвращающего новый экземпляр, тогда как ViewA
может быть зарегистрирован как синглтон).
Но представьте себе new SomeService( aDependency, new AnotherDependency(), () => new SomeProduct( new ThirdDependency(), aDependency )
в отличие от Container.Resolve<SomeService>()
...
Unity или любого DI-контейнера, то есть just облегчает жизнь при созданииэкземпляров.Конечно, вы можете делать все вручную, вам не нужно.Будьте осторожны - вы должны , а не ввести контейнер.Скорее, добавьте фабрику, если вам нужно создавать экземпляры на лету.
Пример того, как MainWindow
может выглядеть:
public partial class MainWindow : Window
{
private readonly Func<ViewA> _viewAFactory;
private readonly Func<ViewB> _viewABFactory;
IRegionManager _regionManager;
IRegion _region;
ViewA _viewA;
ViewB _viewB;
public MainWindow(Func<ViewA> viewAFactory, Func<ViewB> viewBFactory, IRegionManager regionManager)
{
InitializeComponent();
_viewAFactory = viewAFactory;
_viewBFactory = viewBFactory;
_regionManager = regionManager;
this.Loaded += MainWindow_Loaded;
}
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
_viewA = _viewAFactory();
_viewB = _viewBFactory();
_region = _regionManager.Regions["ContentRegion"];
_region.Add(_viewB);
_region.Add(_viewA);
}
}
Все это действительно должно произойти в MainWindowViewModel
, хоть.Взгляните ViewModelLocator
на очень простой способ заставить ваши виды волшебным образом создавать свои модели представлений (правильно разрешенные со всеми зависимостями).