2016-05-04 17 views
0

Xamarin.FormsでPrismとUnityを使用すると、明示的に指定せずにナビゲーションの対象となるすべてのビューを登録する方法はありますか?私は、このアプリケーションを研究開発をするいくつかの点ではるかに大きくなることを期待Xamarin.FormsでPrismで自動的にビューを登録する方法

Container.RegisterTypeForNavigation<MainPage>(); 

:プリズムによって提供さ

サンプルプロジェクトは、次の行を持っているApp.xaml.csで関数RegisterTypesを持っています。

私はUnityのエキスパートではありませんが、私はDependencyServiceまたはIUnityContainerを使用していくつかの方法を試していましたが、成功しませんでした。

Container.Registrations.Where(cm => cm.RegisteredType == typeof (IView)); 
Container.ResolveAll<IView>(); 
DependencyService.Get<IEnumerable<IView>>(); 

は、どのように私は、ナビゲーションのために(例えば、指定されたインタフェースを実装することまたはビューの少なくとも一部、)すべてのビューを登録するに行きますか?

答えて

2

少しの反射で、Pageから継承するすべてのタイプのコアアセンブリを登録できます。

public class Bootstrapper : UnityBootstrapper 
{ 
    protected override void OnInitialized() 
    { 
     NavigationService.Navigate("MainPage"); 
    } 

    protected override void RegisterTypes() 
    { 
     RegisterAllPages(); 
    } 

    private void RegisterAllPages() 
    { 
     var pageBaseTypeInfo = typeof(Page).GetTypeInfo(); 
     var types = GetType().GetTypeInfo().Assembly.DefinedTypes; 
     var pageTypeInfos = types 
         .Where(x => x.IsClass && pageBaseTypeInfo.IsAssignableFrom(x)); 

     foreach (var page in pageTypeInfos) 
     { 
      // the next two lines do what RegisterTypeForNavigation does 
      Container.RegisterType(typeof(object), page.AsType(), page.Name); 
      PageNavigationRegistry.Register(page.Name, page.AsType()); 
     } 
    } 
} 
関連する問題