2015-02-10 59 views
1

這似乎很奇怪,除非我失去了一些東西......重寫擴展方法需要組裝參考

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 
    } 
} 

的這兩種擴展方法是在同一個類中定義。第二個覆蓋需要知道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...

如果我改變問題消失的方法之一的名稱。除了更改名稱之外,是否有解決此問題的方法?理想情況下,我希望覆蓋具有相同的名稱,但處理不同的類型。

謝謝。

注意:有關於查找未引用的程序集的問題,但在這種情況下,我詢問的是擴展方法的編譯,而不僅僅是缺少的程序集引用。

+3

編譯器需要確定要使用哪個重載,所以它需要引用任何重載的簽名中使用的任何類型。 – dbugger 2015-02-10 21:18:32

+0

更改方法的名稱不能解決此問題。該錯誤是關於缺少的參考。 – 2015-02-10 21:18:57

+1

如果要編譯代碼,請添加對引用的外部程序集的引用。 – 2015-02-10 21:20:14

回答

1

Universe.SolarSystemCelestial的基類是什麼?

它與返回類型或者在不同的程序集中,或者它的一個基類型,或者它公開公開的類型在另一個程序集中有關。

編輯:

有額外的評論再次讀取的問題後,該問題是由@dbugger

一位工作人員表示各地將有不同的命名空間的擴展方法,並在調用代碼只添加你需要的命名空間。所以編譯器只能看到一個。

+0

Universe.SolarSystemCelestial只有框架類型。 – Remotec 2015-02-11 07:28:30