Prism Unity アプリを作成し (prism 拡張パックから - 本当に素晴らしい)、2 つの新しいビューを追加し、ビュー間の基本的なナビゲーションをセットアップしました。これはすべて、問題なく正常に機能しました。
本当に欲しいのは、DryIoc を使用することです (会社のポリシー)。そこで、Unity パッケージ (Unity および Prism.Unity.Forms) を削除し、DryIoc パッケージ (DryIoc および Prism.DryIoc.Forms) をインストールしました。正しい名前空間 (xmlns:prism="clr-namespace:Prism.DryIoc;assembly=Prism.DryIoc.Forms") を使用するように App.xaml を修正し、Unity 参照ではなく DryIoc を使用するように他のすべての参照を修正しました。
これはすべて例外なくコンパイルおよび実行されます。しかし、デバッグすると、AutoWireup が期待どおりに機能しないことは明らかです (少なくとも私が期待するとおり)。ViewModel のコンストラクター (またはその他の場所) のブレークポイントはヒットせず、タイトル バインディングはプルスルーされません。
不足している構成/セットアップまたはリファレンスはありますか?
私のコード: 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";
}
}
上記のように、AutoWireUp を True に設定して、PageName & PageNameViewModel の標準命名規則を使用します。
これはすべてUnityでうまく機能しましたが、DryIocで何かが欠けています...しかし、私を逃れるものは何ですか。
プロジェクト全体を検索しましたが、Unity の参照や痕跡は残っていません。
どんな助けでも大歓迎です。