2015-05-04 50 views
0

我想擴展一個來自編譯的DLL的類方法,並且試圖從MVC項目中完成此操作。但是,由於某種原因,它並沒有選擇這個。如何擴展實例化的類方法

這是如何我通常延伸實例化的類的方法,作爲一個例子:

public static string CSVEncode(this string original) 
    { 
     //....... 
    } 

藉助於此,如果我有任何串,我可以看到並調用從對象本身的CSVEncode()方法,像這樣的作爲一個例子:

string temp = "some string goes here"; 
string csv = temp.CSVEncode(); 

然而,在這個最新嘗試,它根本不工作...

這裏我想給前對象的定義小傾向於這個問題的目的(例如:有更多的屬性和方法不需要在這裏迭代)。

namespace SomeOtherDLL.HumanRace 
{ 
    public class Human 
    { 
     //... some properties... 

     public Human(){ } 

     public bool CanAccess(string AppName) 
     { 
     //.... 
     } 
    } 
} 

在我的MVC解決方案,我有一個共同的項目,其中包括一個名爲Extensions類。在這個類中,我放置了所有的擴展,包括我正在嘗試爲上面的對象執行的擴展。

但是,這不會在隨後的任何地方顯示在Intellisense中,如果我嘗試構建或編譯,我會得到一個錯誤,指出此方法不存在,而我根本不明白爲什麼?

namespace MyProj.Common 
{ 
    public static class Extensions 
    { 
     public static bool CanAccess(this HumanRace.Human original, int AppID) 
     { 
      //...some code here... 
     } 
    } 
} 
從我可以告訴其他對象擴展我已經在過去所做的

現在,這應該很好地工作......

這裏是我如何努力在視圖中使用它的一個例子頁面:

@model SomeOtherDLL.HumanRace.Human 
@using MyProj.Common.Extensions 

@Html.Raw(Model.CanAccess(59) ? "<img src='CanAccess.jpg' />" : "<img src='CannotAccess.jpg' />") 

............. 

這不能解決在Visual Studio中......我在這裏做錯了什麼?

回答

1

您的擴展類位於名稱空間MyProj.Common中,但您似乎並未在您的視圖中包含該類。嘗試加入

@using MyProj.Common 

您的看法。

+2

+該模型是最有可能SomeOtherDLL.HumanRace.Human爲SomeOtherDLL.HumanRace是一個命名空間,而不是一個類型 –

+0

你是正確的,我的問題應該反映這一點,但是,我確實已經在我的視圖中正確設置。 ..請參閱上面的更正,因爲它們完全反映了我的代碼在視圖中的設置方式......我現在正確地輸入這些代碼是不好的。 – MaxOvrdrv

+0

這實際上解決了它。使用命名空間而不是靜態類解決了所有的困難!非常感謝! **你可以在7分鐘內接受答案** - 會做! – MaxOvrdrv