覆盖的扩展方法需要程序集引用
Overridden Extension Method Requires Assembly Reference
除非我遗漏了什么,否则这看起来很奇怪......
public static string ToDomainSolarSystemCelestial(this TypeMapper<string> m)
{
// Does not reference any other assemblies - straight string to string mapping.
return m.Source
}
public static Universe.SolarSystemCelestial ToDomainSolarSystemCelestial(this TypeMapper<Db.SolarSystemCelestial> m)
{
// Maps between a database and business object.
// Requires a reference to the Db assembly.
return new Universe.SolarSystemCelestial()
{
Id = m.Source.Id,
// etc
}
}
这两种扩展方法都在同一个 class 中定义。第二个覆盖需要知道 Db.SolarSystemCelestial 是什么,因此它需要对包含程序集的引用。然而,第一个是直接的字符串到字符串映射。
但是如果我这样做...
var x = Mapper.Map("x").ToDomainSolarSystemCelestial();
.. 使用没有依赖关系的重载,Visual Studio 将抱怨以下消息:
The type Db.SolarSystemCelestial is not defined in an assembly that is referenced. You must add a reference to assembly Db, Version 1.0.0.0...
如果我更改其中一种方法的名称,问题就会消失。除了更改名称之外,是否有解决此问题的方法?理想情况下,我希望覆盖具有相同的名称但处理不同的类型。
谢谢。
注意:存在关于查找未引用的程序集的问题,但在这种情况下,我询问的是扩展方法的编译,而不仅仅是缺少的程序集引用。
Universe.SolarSystemCelestial 的底 class 是多少?
这与 return 类型有关,要么在不同的程序集中,要么它的一种基本类型,或者它公开公开的类型在另一个程序集中。
编辑:
再次阅读问题并附加评论后,问题如@dbugger所述
一种解决方法是在不同的命名空间中使用扩展方法,并且在调用代码中仅添加您需要的命名空间。所以编译器只看到一个。
除非我遗漏了什么,否则这看起来很奇怪......
public static string ToDomainSolarSystemCelestial(this TypeMapper<string> m)
{
// Does not reference any other assemblies - straight string to string mapping.
return m.Source
}
public static Universe.SolarSystemCelestial ToDomainSolarSystemCelestial(this TypeMapper<Db.SolarSystemCelestial> m)
{
// Maps between a database and business object.
// Requires a reference to the Db assembly.
return new Universe.SolarSystemCelestial()
{
Id = m.Source.Id,
// etc
}
}
这两种扩展方法都在同一个 class 中定义。第二个覆盖需要知道 Db.SolarSystemCelestial 是什么,因此它需要对包含程序集的引用。然而,第一个是直接的字符串到字符串映射。
但是如果我这样做...
var x = Mapper.Map("x").ToDomainSolarSystemCelestial();
.. 使用没有依赖关系的重载,Visual Studio 将抱怨以下消息:
The type Db.SolarSystemCelestial is not defined in an assembly that is referenced. You must add a reference to assembly Db, Version 1.0.0.0...
如果我更改其中一种方法的名称,问题就会消失。除了更改名称之外,是否有解决此问题的方法?理想情况下,我希望覆盖具有相同的名称但处理不同的类型。
谢谢。
注意:存在关于查找未引用的程序集的问题,但在这种情况下,我询问的是扩展方法的编译,而不仅仅是缺少的程序集引用。
Universe.SolarSystemCelestial 的底 class 是多少?
这与 return 类型有关,要么在不同的程序集中,要么它的一种基本类型,或者它公开公开的类型在另一个程序集中。
编辑:
再次阅读问题并附加评论后,问题如@dbugger所述
一种解决方法是在不同的命名空间中使用扩展方法,并且在调用代码中仅添加您需要的命名空间。所以编译器只看到一个。