我有一个应用程序,我正在移植到Prism(来自XamVvm)。我正在使用DryIoC。
我的界面看起来像这样
[assembly: Dependency(typeof(IJoinCongregation))]
namespace MapManPrism.Services
{
public interface IJoinCongregation
{
Task<bool> JoinCongregation(int Identifier, int PIN);
Task<bool> CheckForMapUpdates();
Task<Models.API.Publisher> PostPublisher(string name, string phone, int congregationid);
}
实现此接口的类看起来像这样
public class JoinCongregation : IJoinCongregation
{
private readonly string JoinCongregationAction = $"{EnvironmentConfiguration.WebEndPoint}Congregations/AuthoriseCongregation";
private readonly string RegisterPublisherAction = $"{EnvironmentConfiguration.WebEndPoint}Publisher/EnrolPublisher";
private readonly IFileStorage _fileStorage;
private readonly IDatabaseService _database;
public JoinCongregation(IFileStorage fileStorage, IDatabaseService database)
{
//var container = new Container();
//container.resolve
_fileStorage = fileStorage;
_database = database;
}
但是,当我的构造函数代码在我的页面viewmodel(名为WelcomeWizardPageViewModel)中运行时,它无法解决IJoinCongregation的具体实现。这使得DryIoC在超出超时时抛出错误。
构造函数代码如下所示......
public WelcomeWizardPageViewModel(IJoinCongregation congregation)
{
//var container = new Container();
//new DatabaseService(); // runs constructor code which we need
_congregation = congregation;
...
我做错了什么?这些是我的猜测。
任何帮助都会所以非常感谢。谢谢。
编辑:这些是服务首先注册的方式:
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterForNavigation<NavigationPage>();
containerRegistry.RegisterForNavigation<MainPage>();
containerRegistry.RegisterForNavigation<WelcomeWizardPage>();
containerRegistry.RegisterForNavigation<SettingsPage>();
//containerRegistry.RegisterForNavigation<WelcomeWizard>();
//containerRegistry.register
//containerRegistry.RegisterType<IFileStorage, FileStorage>();
containerRegistry.Register<ICartService, CartService>();
containerRegistry.Register<IDatabaseService, DatabaseService>();
containerRegistry.Register<IJoinCongregation, JoinCongregation>();
containerRegistry.Register<IMapService, MapService>();
}
答案 0 :(得分:1)
最后,我只是忘记了注册一项从属服务。这就是我修复它的方法。
确定页面视图模型具有哪些依赖关系,然后在页面视图模型中将它们设置为null以验证页面视图模型是否正常工作以及自动视图模型解析。这是有效的,所以它必须是别的东西。
从页面视图模型的构造函数中取出两个服务。这也有效。
将一项服务添加回页面视图模型。这仍然有效。
向页面视图模型添加第二个服务,轮子脱落并且因DryIoC错误而崩溃。
导航到使其中断并检查其依赖关系的服务。
其中一个其依赖项未在DryIoC中注册。添加它,生物叹息。