繁体   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