C#泛型异常,在Autofac.ContainerBuilder.Build上在接口上使用泛型失败

问题描述

我相信我已经正确定义了所有接口注册,但是在致电时会遇到异常
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/仍然混淆了协方差和相反方差输入