2016-07-31 210 views
2

我是新來的棱鏡,我正在尋找一些關於在使用Prism(Prism.Forms 6.2.0預覽3)與Xamarin形式時在viewModel實例化期間可用對象的指導。棱鏡Xamarin形式可注射對象

我看到INavigationService和IEventAggregator參數值由框架在導航到視圖/視圖模型時提供。請參閱下面的代碼以獲取插圖。

public ViewBViewModel(INavigationService navigationService, IEventAggregator ea) 
    { 
     _ea = ea; 
     _navigationService = navigationService; 
    } 

navigationService和ea對象(上面)由Prism填充。

問: 哪些對象可以自動填充在由框架視圖模型實例(外INavigationService和IEventAggregator的)?謝謝。

回答

2

它看起來像這些都是你註冊的實現:

  • INavigationService
  • IApplicationProvider
  • IModuleManager
  • IModuleInitializer
  • IEventAggregator
  • IDependencyService
  • IPageDialogService
  • ILoggerFacade

見源here

這就是說,我只熟悉INavigationService,IEventAggregatorIPageDialogServiceILoggerFacade看起來很有趣。

查看文檔here

+0

感謝您提供鏈接到構造函數代碼和額外的注入項目。我也熟悉INavigationService,IEventAggregator和IPageDialogService。我會對這些其他注入的對象做一些額外的研究,如果我找到好的信息,請用我的答案更新帖子。我會給你一點,但我的水平太低。再次感謝。 –

+0

我想知道是否有人實現了跨平臺記錄器 – Shimmy

0

您可以解決在容器中註冊的任何服務/對象。將您的物品註冊到您的的RegisterTypes()方法中,您的PrismApplication。然後通過在構造函數中注入來解決它。

// Register 
    Container.RegisterType<IYourObject, YourObject>(); 

// Resolve 
    public SomeClass(IYourObject yourObject) 
    { 
     _yourObject = yourObject; 
    } 

如果你有一個特定於平臺的依賴,那麼在您的應用程序初始化註冊這些服務,例如在iOS上,您AppDelegate.cs將加載Xamarin.Forms應用這個樣子,

... 

LoadApplication(new App(new iOSAppInitializer())); 

... 

的初始化可以像這樣

public class iOSAppInitializer : IPlatformInitializer 
{ 
    public void RegisterTypes (IUnityContainer container) 
    { 
     container.RegisterType<IMyService, MyService>(); 
    } 
} 

此外,還可以作爲RegisterInstance註冊第三方插件,並在你的類注入他們。例如,假設你正在使用Acr.UserDialogs插件警報,而不是到處使用static實例(這將使得單元測試有趣的),你可以簡單地把它註冊到容器中

RegisterInstance<IUserDialogs>(UserDialogs.Instance); 

,並注入需要的地方。

public SomeClass(IUserDialogs userDialogs) 
{ 
    _userDialogs = userDialogs; 
} 

PS:如果第三方插件不公開的抽象,你可以用一個靜態的,用它來註冊和解析。