Prism 7.X представляет абстракцию вокруг DI-контейнера.Для этого было несколько причин, но две главные из них:
- Многие вопросы поддержки от сообщества к команде Prism связаны с тем, как сделать что-то с контейнером, который не имеет ничего общего скоманда Prism.
- Абстрагируя контейнер, можно упростить сценарии совместного использования кода и замены контейнеров.
Также важно понимать, что абстрагируя контейнер, мы также сделалиизменения в Контейнерных Расширениях, ответственных за регистрацию Представлений.В частности, теперь у нас есть их на IContainerRegistry.Итак, приведенный пример модуля Prism 6.X здесь:
public class ModuleA
{
private IUnityContainer _container { get; }
public ModuleA(IUnityContainer container)
{
_container = container;
}
public void Initialize()
{
// register stuff
_container.RegisterViewForNavigation<ViewA>();
// Setup Event listeners etc...
var ea = _container.Resolve<IEventAggregator>();
}
}
Мы бы обновили его до:
public class ModuleA
{
public void OnInitialized(IContainerProvider containerProvider)
{
// Setup Event listeners etc...
var ea = containerProvider.Resolve<IEventAggregator>();
}
public void RegisterTypes(IContainerRegistry containerRegistry)
{
// register stuff
containerRegistry.RegisterForNavigation<ViewA>();
}
}