我在我的 Xamarin.Forms(4.0.0.497661)之一中使用 Prism.DryIoc.Forms(7.1.0.431) em> 项目。解决其他服务类中的依赖关系时遇到问题。
用例:
我们有一个名为RestService的服务,它可以处理网络呼叫,并且还实现了另一个名为ProfileService的服务,在该服务中,我们可以获取用户信息以及与Profile的服务相关的其他内容。我正在考虑解决ProfileService中的RestService依赖关系以进行网络调用。
我已经通过App.xaml.cs
方法在RegisterTypes()
中注册了这两项服务。
答案 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;
快乐编码:)
注意:-不建议使用上述方法,因为这会使您的类/代码无法测试。