如何解决 Prism + DryIoC 中的依赖关系

vma*_*kam 1 c# prism xamarin.forms

我在我的Xamarin.Forms (4.0.0.497661)项目之一中使用Prism.DryIoc.Forms (7.1.0.431)。我在解决其他服务类中的依赖项时遇到问题。

用例:

我们有一个名为 RestService 的服务,它负责处理网络调用,我们还实现了另一个名为 ProfileService 的服务,在其中我们获取用户信息和其他与 Profile 服务相关的内容。我正在考虑解决 ProfileService 中的 RestService 依赖项以进行网络调用。

我已经在App.xaml.csunderRegisterTypes()方法中注册了这两个服务。

Ham*_*ikh 5

如果要访问 Prism.Forms 使用的底层容器。在您的 DryIoc 情况下,您可以轻松进入 RegisterTypes 方法。

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

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; }
}
Run Code Online (Sandbox Code Playgroud)

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

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

注意:- 在您调用上面代码行的类中导入 DryIoc 命名空间。

using DryIoc;
Run Code Online (Sandbox Code Playgroud)

快乐编码:)

注意:- 不推荐使用上述方法,因为这会使您的类/代码无法测试。