c# – 好奇的依赖项解析错误
我最近遇到了一个dependecy resolution错误,我希望有人在这里解释.
我有一个在3rdparty程序集(I3rdParty)中定义的接口,一个依赖于该程序集的“common”程序集和一个依赖于“common”程序集的“client”库. client.dll不应该与3rdparty.dll有依赖关系. 在common.dll中定义了以下内容: public static class Factory { public static object Create(I3rdParty ifc) { ... } public static object Create(string value1,string value2,long? value3 = null) { ... } } 其中一个工厂方法来自client.dll,如: var instance = Factory.Create("SomeValue","SomeValue2"); 在这一点上,一切都按预期工作. 然后在common.dll中的第一个工厂方法中引入了bool参数,因此它变为: public static object Create(I3rdParty ifc,bool value) { ... } 然后,client.dll的构建由于缺少对3rdparty.dll的依赖而开始失败,例如: The type 'I3rdParty' is defined in an assembly that is not referenced... 我假设这与此有关,方法现在接受相同数量的参数(因为第二个Create方法的第三个参数默认为null). 但我认为它仍然可以根据参数的类型选择正确的Create方法.谁能解释我所看到的行为的原因? 解决方法
将bool参数添加到第一个重载后,编译器现在要检查两个可能的方法签名,以选择应该使用的方法(这是重载决策).
你正在调用Create(字符串,字符串) 使用两个参数,您可以使用以下重载: Create(I3rdParty,bool) Create(string,string) 显然只有第二个可以匹配(因为第二个参数不能将字符串隐式转换为bool),但看起来编译器不够聪明并且必须知道I3rdParty到底是什么(这意味着它需要引用程序集在定义它之前,在能够确定(I3rdParty,bool)重载之前不是一个选项. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |