加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 22:09:48 所属栏目:百科 来源:网络整理
导读:我最近遇到了一个dependecy resolution错误,我希望有人在这里解释. 我有一个在3rdparty程序集(I3rdParty)中定义的接口,一个依赖于该程序集的“common”程序集和一个依赖于“common”程序集的“client”库. 我们称之为3rdparty.dll,common.dll和client.dll. 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)重载之前不是一个选项.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读