2017-03-08 3 views
-1

問題のあるメソッドを持つサードパーティアセンブリを使用しています。メソッドが使用されるべきではないことを開発者に警告する方法はありますか?コンパイル時に実行することをお勧めしますが、実行時には問題ありません。廃止された属性のようなものですが、別のアセンブリのものです。私はそれが仮想ではないので、メソッドをオーバーライドできません。別のアセンブリでメソッドを使用しないようにします

+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が変更された場合に再生成することができます。これは有用であったhttps://msdn.microsoft.com/en-us/library/dd820614.aspx

希望 - あなたはリフレクションを使用している場合、あなたもT4にNmoreの情報についてはT4 ...

を記述する必要はないかもしれません。

+0

私はラップした場合、私はちょうど別の問題の1つの取引になります。メソッドのクラスを継承した(ラップされていない)クラスを作成し、メソッドをシャドウした場合の問題は何でしょうか。それはあまりにも問題がありますか? – BSalita

+0

タイプ転送のヘルプがあれば、それはありますか? – BSalita

+0

@BSalita別の問題を1つの問題と交換することがどういう意味なのか分かりません...あなたはこれを行うことで望みを達成することができ、リフレクションとコード生成を使用する場合は、非表示にしたいメソッドがバーチャルではないことを指摘したため、オーバーライドできません。あなたは運が悪いです、私は恐れています。 – Rendition

関連する問題