我创建了一个 Prism Unity 应用程序(来自 prism 扩展包 - 非常好),添加了 2 个新视图并在视图之间设置了基本导航。这一切都很好,没有任何问题。
我真正想要的是使用 DryIoc(公司政策)。所以我开始删除统一包(Unity 和 Prism.Unity.Forms)并安装 DryIoc 包(DryIoc 和 Prism.DryIoc.Forms)。修复了 App.xaml 以使用正确的命名空间 (xmlns:prism="clr-namespace:Prism.DryIoc;assembly=Prism.DryIoc.Forms"),并且还修复了所有其他引用以使用 DryIoc 而不是 Unity 引用。
这一切都编译并运行,没有任何例外。但是当我调试时,很明显 AutoWireup 没有按预期工作(至少正如我所期望的那样)。ViewModel 的构造函数(或任何其他位置)中的断点未命中,并且 Title 绑定未通过。
是否有我缺少的配置/设置或参考?
我的代码:App.xaml:
<?xml version="1.0" encoding="utf-8" ?><prism:PrismApplication xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:prism="clr-namespace:Prism.DryIoc;assembly=Prism.DryIoc.Forms"
x:Class="XamFormsPrism.App"></prism:PrismApplication>
应用程序.xaml.cs:
public partial class App : Prism.DryIoc.PrismApplication
{
public App(IPlatformInitializer initializer = null) : base(initializer) { }
protected override void ConfigureContainer()
{
base.ConfigureContainer();
}
protected override void OnInitialized()
{
this.InitializeComponent();
this.NavigationService.NavigateAsync(NavigationLinks.MainPage);
}
protected override void RegisterTypes()
{
this.Container.RegisterTypeForNavigation<MainPage>();
this.Container.RegisterTypeForNavigation<ViewA>();
this.Container.RegisterTypeForNavigation<ViewB>();
}
}
MainPage.xaml:
<?xml version="1.0" encoding="utf-8" ?><ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms"
prism:ViewModelLocator.AutowireViewModel="True"
x:Class="XamFormsPrism.Views.MainPage"
Title="MainPage"><StackLayout HorizontalOptions="Center" VerticalOptions="Center">
<Label Text="{Binding Title}" />
<Button Text="{Binding NavigateText}" Command="{Binding NavigateCommand}" /> </StackLayout></ContentPage>
MainPageViewModel.cs:
public class MainPageViewModel : BindableBase, INavigationAware
{
private INavigationService navigationService = null;
private string _title = "Jose Cuervo";
public string Title
{
get { return _title; }
set { SetProperty(ref _title, value); }
}
public DelegateCommand NavigateCommand { get; private set; }
public MainPageViewModel(INavigationService navigationService)
{
this.navigationService = navigationService;
this.NavigateCommand = new DelegateCommand(this.navigate, this.canNavigate);
}
private void navigate()
{
this.navigationService.NavigateAsync("ViewA");
}
private bool canNavigate()
{
return true;
}
public void OnNavigatedFrom(NavigationParameters parameters)
{
}
public void OnNavigatedTo(NavigationParameters parameters)
{
if (parameters.ContainsKey("title"))
Title = (string)parameters["title"] + " and Prism";
}
}
如上所示,我使用 PageName 和 PageNameViewModel 的标准命名约定,并将 AutoWireUp 设置为 True。
这一切都适用于 Unity,但我在 DryIoc 中遗漏了一些东西......但什么让我逃脱了。
我已经搜索了整个项目,Unity 没有任何参考或痕迹。
任何帮助深表感谢。