微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 好奇的依赖项解析错误

我最近遇到了一个dependecy resolution错误,我希望有人在这里解释.

我有一个在3rdparty程序集(I3rdParty)中定义的接口,一个依赖于该程序集的“common”程序集和一个依赖于“common”程序集的“client”库.
我们称之为3rdparty.dll,common.dll和client.dll.

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)重载之前不是一个选项.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐