3

我在这行代码中遇到错误:

    using (IMaterialClient rawMaterialServiceProxy =
ServerUtility.Container.Resolve<IMaterialClient>())

错误:

依赖解析失败...当前类型xxx是一个接口,无法构造。您是否缺少类型映射?

我没有注册具体的 IMaterialClient。在我刚刚观看的 Pluralsight 视频中,他们说您不必注册每种类型,因为如果未指定,Unity 会找到实现。那改变了吗?我错过了什么吗?为什么不解决?运行此程序时,具有实际 IMaterialClient 实现的程序集位于 bin 文件夹中。

4

2 回答 2

5

如果他们对 Unity 这么说,那他们就错了。Unity 将解析具体类型 ( .Resolve<MyClass>),但必须通过将接口与具体类型相关联来显式注册接口。

有诸如Unity Auto Registration之类的扩展来提供这些功能;我对他们没有经验。

于 2012-12-06T21:02:20.127 回答
5

我不知道 Unity 中的该功能。据我所知,它会很高兴地解决未注册的具体类型,但必须为任何抽象类型或接口注册一个具体类型。最好的办法是注册它:

ServerUtility.Container.RegisterType<IMaterialClient, ConcreteMaterialClient>();
于 2012-12-06T21:10:42.440 回答