You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Plugin未注入Resource:依赖注入失败引发空引用异常

解决MORYX Framework中Resource插件注入失败的问题

问题分析

你定义的FooDriver资源类通过DependencyRegistration特性声明了依赖,但在资源创建后,StatusCheckConnectionAttempt属性仍为空,说明依赖注入未正常生效。

排查与修复步骤

1. 修正DependencyRegistration特性的参数格式

原代码中特性的参数写法有误,第二个参数使用了数组形式,不符合该特性的参数要求,这很可能是注入失败的直接原因。正确写法应将每个依赖类型作为单独参数传入:

[ResourceRegistration, DependencyRegistration(typeof(IConnectionAttempt), typeof(IStatusCheck))]
public class FooDriver : Driver
{
    // 预期依赖注入
    public IStatusCheck StatusCheck { get; set; }
    public IConnectionAttempt ConnectionAttempt { get; set; }
    ...
}

2. 确认依赖实现类的注册状态

确保IConnectionAttemptIStatusCheck的具体实现类已被框架正确注册:

  • 实现类需带有[Plugin]特性(如[Plugin(LifeCycle.Singleton)]),明确其插件身份
  • 实现类所在的模块需带有[Module]特性,且该模块已在框架启动配置中启用

3. 切换为构造函数注入(更可靠的方式)

如果属性注入仍存在问题,推荐使用构造函数注入,这是框架更优先支持的依赖注入方式,无需额外特性声明:

[ResourceRegistration]
public class FooDriver : Driver
{
    public IStatusCheck StatusCheck { get; }
    public IConnectionAttempt ConnectionAttempt { get; }

    public FooDriver(IStatusCheck statusCheck, IConnectionAttempt connectionAttempt)
    {
        StatusCheck = statusCheck;
        ConnectionAttempt = connectionAttempt;
    }
    ...
}

4. 验证资源创建流程的注入配置

部分特殊场景下,资源创建流程可能需要显式启用属性注入,需检查框架配置中是否开启了资源的属性注入支持。

内容的提问来源于stack exchange,提问作者1nf0rmagician

火山引擎 最新活动