2017-03-08 65 views
-1

我們正在使用具有問題方法的第三方裝配。有什麼方法可以提醒我們的開發人員不應該使用該方法,最好是在編譯時,但運行時也可以。類似於Obsolete屬性,但是用於其他程序集。我不能重寫該方法,因爲它不是虛擬的。防止在其他裝配中使用方法

+0

@HimBromBeere他要求一種方法來標記他無法訪問的第三方程序中過時的方法。我沒有辦法做到這一點,我知道。 – InBetween

+1

然後它可能會在這裏回答:http://stackoverflow.com/questions/8316869/add-an-attribute-to-another-assemblys-class – HimBromBeere

回答

0

我可以看到這是可能的唯一方法是將API包裝在您自己的程序集中,並讓開發人員使用您的程序集而不是提供的程序集。

using MyAPI; 

public class MyWrapper 
{ 
    private MyAPI _api; 

    public MyWrapper() 
    { 
     _api = new MyAPI(); //Especially if you want to do some inits 
    } 

    public void APIMethod() 
    { 
     _api.APIMethod(); 
    } 
} 

我使用同樣的方法名稱,它可以讓你的開發人員只需用新的類替換對象的實例化,甚至更多厚臉皮,調用類的同樣的事情,更改命名空間。

然後,您可以省略違規方法或將其標記爲過時。

您甚至可以使用T4模板爲您生成代碼,以便在API更改時重新生成代碼。如果您使用反射,你甚至可以不寫T4 ...

有關T4 n更多信息 - https://msdn.microsoft.com/en-us/library/dd820614.aspx

希望這是有益的。

+0

如果我包裝,我只會在另一個問題交易。如果我創建了一個繼承(不包裝)該方法的類,然後映射該方法的類,會出現什麼問題。這太有問題了嗎? – BSalita

+0

某種類型的轉發幫助,如果存在? – BSalita

+0

@BSalita不確定你的意思是交換另一個問題......你可以通過這樣做來達到你想要的目的,如果你使用反射和代碼生成,你只需要做一次。你不能重寫,因爲你指出你想隱藏的方法不是虛擬的,所以你恐怕沒有運氣。 – Rendition