gpt4 book ai didi

c# - 使用服务依赖注入(inject)实例化 MyViewModel 时出现 NullReferenceException

转载 作者:行者123 更新时间:2023-12-03 10:58:49 24 4
gpt4 key购买 nike

我尝试使用Catel中使用服务的最佳方法,即在viewmodel的构造函数中注入(inject)服务:

public MyViewModel(IMessageService msgService)
{
Argument.IsNotNull(() => msgService);
this.messageService = msgService;
//stuff
}

然而,当我在这个构造函数中放入参数时,我的程序会抛出一个 NullReferenceException,据说是在 Argument.IsNoNull 行(通过 Catel 的代码进行调试似乎很痛苦)。当我删除参数或 IsNotNull 验证时,它会正常启动。

所以我没有收到 IMessageService,msgService 始终为空。
我究竟做错了什么?缺少组装?

编辑:
似乎 IMessageService 类型已注册。我设法通过使用 ResolveType 获得引用:
messageService = ServiceLocator.Default.ResolveType<IMessageService>();

所以就我的项目而言,问题就解决了。但它没有回答最初的问题:为什么依赖注入(inject)不起作用?

最佳答案

如果你得到一个空值,这意味着无法解决依赖关系。如果您使用的是 Catel 的默认 ServiceLocator,请启用日志记录以查看应用程序启动时的幕后情况:

#if DEBUG
LogManager.AddDebugListener();
#endif

您还可以使用以下代码检查类型是否已注册:
var serviceLocator = ServiceLocator.Default;
serviceLocator.IsTypeRegistered<IMessageService>();

关于c# - 使用服务依赖注入(inject)实例化 MyViewModel 时出现 NullReferenceException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27898821/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com