问题描述
我相信我已经正确定义了所有接口注册,但是在致电时会遇到异常
container = builder.Build();
例外:
\'Common.RpcServer`2 [Logic.Engine,Messages.Serializer] \'
无法分配给服务
\'Common.IRpcServer`2 [[
服务.IEngine,合同,
版本= 1.0.0.0,文化=中性,
PublicKeyToken = null],[Messages.ISerializer,
合同,版本= 1.0.0.0,
文化=中立,
PublicKeyToken = null]] \'。
我有一个非常简单的IEngine和ISerializer的注册代码(分别是一个和一个都不相关)。
RpcServer稍微复杂一点,但是它的所有依赖关系看起来都可以很好地解决。
builder.Register(c =>
new RpcServer<Engine,Serializer>(
c.Resolve<ISubscription>(),c.Resolve<IService>() as Engine,c.Resolve<ISerializer>() as Serializer)
).As<IRpcServer<IService,ISerializer>>();
除了例外,还是方括号的嵌套,我应该关注版本列表吗?
RpcServer`2 [Logic.Engine,Messages.Serializer]
与
IRpcServer`2 [[Services.IEngine],[Messages.ISerializer]]
我还有什么需要寻找的诊断方法?
解决方法
投票以“太本地化”关闭。
但是,如果您发现此问题是为了解决自己的问题,我建议对所有接口进行三重检查,并确保它们支持协方差。
感谢蒂姆·罗杰斯(Tim Rogers)提到这一点,我的代码库中的一个界面以及另一个非常本地化的问题都得以解决。
也可以看看:
stackoverflow.com/questions/245607/如何在c-4-0中实现通用协方差对立方差
stackoverflow.com/questions/2662369/covariance-and-contravariance-real-world-example
stackoverflow.com/questions/3445631/仍然混淆了协方差和相反方差输入