如何解决Prism + DryIoC

时间:2019-07-03 09:29:43

标签: c# xamarin.forms prism

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

用例:

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

我已经通过App.xaml.cs方法在RegisterTypes()中注册了这两项服务。

2 个答案:

答案 0 :(得分:0)

  

我正在考虑解决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这样的注册过度约定是一个明显的例外,但是实际上,从概念上讲,我们在这里注入通用工厂而不是解析单个视图模型。

答案 1 :(得分:0)

如果要访问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;

快乐编码:)

  

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