You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

旧Asp.Net应用升级Unity至最新版后出现ResolutionFailedException求助

解决Unity更新后出现的ResolutionFailedException问题

嘿,这个问题我之前升级Unity的时候也碰到过!核心原因是新版Unity对属性注入的规则收紧了——旧版本可能睁一只眼闭一只眼允许给没有setter的属性注入依赖,但现在它严格要求要注入的属性必须有可访问的setter方法。

咱们一步步来解决:

1. 先排查属性定义问题

打开DAL.Repositories.SomeRepository类,找到那个converter属性,大概率是写成了下面这种只有getter的形式:

public IConverter converter { get; }

这种属性是只读的,Unity新版本根本没法给它赋值,自然就抛出异常了。

2. 两种修复方案任你选

方案一:给属性添加public setter

最简单的办法就是把属性改成带public setter的:

public IConverter converter { get; set; }

这样Unity就能正常完成属性注入了。

方案二:改用构造函数注入(更推荐)

如果不想暴露public setter(毕竟破坏封装性),那强烈建议换成构造函数注入——这本来就是依赖注入的最佳实践,还能避免后续更多兼容性问题:

public class SomeRepository
{
    private readonly IConverter _converter;

    // 把依赖通过构造函数传入
    public SomeRepository(IConverter converter)
    {
        _converter = converter ?? throw new ArgumentNullException(nameof(converter));
    }
}

这样一来,对象创建时依赖就被初始化了,还能确保依赖不会被随意修改,代码的可靠性更高。

3. 特殊情况处理

如果你的属性是用C# 9+的init关键字定义的(比如public IConverter converter { get; init; }),那Unity的属性注入也会失败——因为init只能在对象初始化阶段赋值,而Unity是在对象创建后才做属性注入的,这种情况同样要换成构造函数注入。

最后说句题外话:Unity新版本的这个改动其实是好事,逼着咱们更规范地使用依赖注入,构造函数注入确实比属性注入更靠谱,能让依赖关系更清晰,也不容易出现空引用的坑。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 10:04:15