簡體   English   中英

如何解決Prism + DryIoC中的依賴性

[英]How to resolve the dependencies in Prism + DryIoC

我在我的Xamarin.Forms(4.0.0.497661)項目之一中使用Prism.DryIoc.Forms(7.1.0.431) 解決其他服務類中的依賴關系時遇到問題。

用例:

我們有一個名為RestService的服務,它可以處理網絡調用,並且還實現了另一個名為ProfileService的服務,在該服務中,我們可以獲取用戶信息以及與Profile的服務相關的其他內容。 我正在考慮解決ProfileService中的RestService依賴關系以進行網絡調用。

我已經在App.xaml.cs RegisterTypes()方法下RegisterTypes()這兩個服務。

如果要訪問Prism.Forms使用的基礎容器。 就您的DryIoc而言,您可以輕松地進入RegisterTypes方法。

protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
   containerRegistry.RegisterForNavigation<NavigationPage>();
   AppContainer = containerRegistry.GetContainer(); //Assigning actual dryioc container
}

AppContainer是在App.xaml.cs類中聲明的屬性,如下所示。

注意:-GetContainer方法是Prism.DryIoc命名空間中提供的擴展方法。 導入名稱空間

using Prism.DryIoc;

//Private and Public variables
public partial class App
{
    /// <summary>
    /// Actual Dry Ioc Container which can be called and used for manual registering and resolving dependencies.
    /// </summary>
    public static IContainer AppContainer { get; set; }
}

現在,您可以使用如下所示的DryIoc容器。

var authService = App.AppContainer.Resolve<IAuthenticationService>();//you need to register IAuthenticationService inside RegisterType Method.

注意:-在您要在代碼行上方調用的類中,導入DryIoc命名空間。

using DryIoc;

快樂編碼:)

注意:-不建議使用上述方法,因為這會使您的類/代碼不可測試。

我正在考慮解決ProfileService中的RestService依賴關系以進行網絡調用。

永遠不要主動解決任何問題,除非在應用程序的根目錄一次。 (*)

您要做的是注入依賴關系,即創建一個構造函數參數:

internal class ProfileService : IProfileService
{
    public ProfileService( IRestService restService )
    {
        // store restService for later, use it now... but have it injected, don't resolve it!
    }
}

(*)像ViewModelLocator這樣的注冊約定ViewModelLocator東西是一個明顯的例外,但是實際上,從概念上講,我們在這里注入通用工廠而不是解析單個視圖模型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM