我正在使用 PRISM 构建我的第一个 Xamarin 移动应用程序(android / iOS)。我正在关注这个非常有用的教程https://xamgirl.com/prism-in-xamarin-forms-step-by-step-part-1/
问题是注入到我的 ViewModel 中的 IUnityContainer 没有我在 PrismApplication 的 RegisterTypes(IContainerRegistry containerRegistry) 函数中注册的类型。
我的问题是:
如何将我的类型注册到 IUnityContainer 以便我可以在我的 ViewModel 中解析它们?
或者
如何获得具有我注册的类型的容器?
public partial class App : PrismApplication
{
public App(IPlatformInitializer Initializer) : base (Initializer) { }
protected override async void OnInitialized()
{
InitializeComponent();
MainPage = this.Container.Resolve<MainPage>();
}
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
//I have read that these registrations should not be necessary, however it crashes if I remove them because I inject them into some view models
containerRegistry.Register<INavigationService, Prism.Navigation.PageNavigationService>();
containerRegistry.Register<IPageDialogService, Prism.Services.PageDialogService>();
containerRegistry.Register<IEventAggregator, Prism.Events.EventAggregator>();
containerRegistry.Register<IUnityContainer, UnityContainer>();
//Pages
containerRegistry.RegisterForNavigation<MainPage, MainPageViewModel>();
containerRegistry.RegisterForNavigation<AboutPage, AboutViewModel>();
containerRegistry.RegisterForNavigation<ItemDetailPage, ItemDetailViewModel>();
containerRegistry.RegisterForNavigation<ItemsPage, ItemsViewModel>();
containerRegistry.RegisterForNavigation<NewItemPage, NewItemViewModel>();
}
}
public partial class MainPage : MasterDetailPage
{
public MainPageViewModel Model
{
get { return BindingContext as MainPageViewModel; }
set { BindingContext = value; }
}
private IUnityContainer _Container;
public MainPage(IUnityContainer container, ItemsPage detail, MainPageViewModel model)
{
InitializeComponent();
MasterBehavior = MasterBehavior.Popover;
Model = model;
Detail = detail;
_Container = container; // I cannot use this container to resolve any of my registered types ???
// for example, _Container cannot be used to resolve a <ItemsPage>
}
}