1 回答
TA贡献1845条经验 获得超8个赞
这里有很多东西要解开,可能需要一些来回的讨论,因为没有足够的信息,但我的时间有点短,想给你一个答案来帮助你。我可能会也可能不会回到这里,所以如果我的回答不起作用,最好用其他信息更新你的问题,而不是发表评论并坐下来等我。
所以。
我看到您已将映射器注册为. 我还看到这是最后一个,这意味着如果您解决了一个未命名的实现,那就是您会得到的。ICodeMapperRelationshipMapper
// You'd get RelationshipMapper
container.Resolve<ICodeMapper>();
我也看到有一个Antlr.Runtime.Misc.Func<string, ICodeMapper>正在注册的。我不知道那种类型是什么,但我可以看到它与System.Func<string, ICodeMapper>.
Autofac 处理System.Func,所以如果它被调用,你会得到一个未命名的实例。
// You'd get RelationshipMapper
var f = container.Resolve<Func<ICodeMapper>>();
f();
这是我要检查的内容:
确保您可以手动解析命名映射器,以确保其正常工作。
确保您正在解析 Antlr
Func
而不是System.Func
.尝试删除
As<ICodeMapper>
并且仅Named<ICodeMapper>
在您不解析任何未命名类型时才使用。您可能会开始遇到异常,这可能会帮助您进一步排除故障。就像如果 Autofac 抛出一个关于没有被注册的异常ICodeMapper
,你就会知道它不是在解析命名的东西,它是在尝试解析未命名的东西。从 Antlr 中抛出异常,
Func
而不是调用componentContext.ResolveNamed
. 看看它是否真的被击中。(我运气不好在那些生成的函数中设置断点。你也可以在那里尝试一个断点。)
希望有帮助。
- 1 回答
- 0 关注
- 110 浏览
添加回答
举报