2012-03-19 31 views
1

私は、カスタム実装のためにWebClientMyWebClientを拡張する必要があるプロジェクトに取り組んでいます。.NETベースクラスの使用を防ぐにはどうすればいいですか?

また、MyWebClientがプロジェクトの開発者によって実装されており、誰もベースのWebClientクラスを使用していない唯一のバージョンであることを確認する必要があります。

WebClientの使用を防ぐことは可能ですか?それは私がアクセスできるコードではないと考えていますか?

+11

。なぜあなたは 'WebClient'の使用を防ぐ必要がありますか? –

+0

ベースを拡張するクラスが1つしかない場合、なぜ基本クラスと子クラスを作成するのですか?コードを基底クラスから子クラスに移動し、それを使って終了します。 – Servy

+1

@Servy私は彼がSystem.NetのWebClientが彼の基本クラスであることを意味すると思います。彼はそれを拡張しており、ユーザーが自分の拡張バージョンをインスタンス化することを確実にしたいと考えています。 –

答えて

2

必要WebClientの機能に応じて、あなたはWebClientメンバーから使用できるようにするだけのメソッドを公開プロキシとしてMyWebClientの実装を検討できます。

例:

public class MyWebClient 
{ 
    private WebClient HiddenWebClient {get; set;} 

    // proxy sample 
    public void DownloadFile(string address, string fileName) 
    { 
     HiddenWebClient.DownloadFile(address, fileName); 
    } 

    // other proxy methods & your specific implementation come here. 

} 

した後、あなたは、専用のctorし、適切MyWebClientをインスタンス化するかもしれない工場が必要になります。

これは、開発者があまりにも難しいWebClientを使用することを妨げるものではありませんが(例えば、@godonの提案を参照してください)、誤って使用するのを避けるのに役立ちます。

編集:あなたの最後のコメントから

、私はあなたが必要とするすべては、すべてのWebClientのインスタンスのユーザーエージェントを設定します工場だと思います。

あなたの組織によっては、その使い方についての強力なコミュニケーションが必要です(プロジェクト内でnew WebClient()を探すための検索ツールかもしれません)。

public static class WebClientFactory 
{ 
    public static WebClient Create() 
    { 
     WebClient result = new WebClient(); 
     result.Headers.Add("My Fancy User Agent"); 
     return result; 
    } 
} 
+0

私はこれを厳密に実施するための賢明な(そして簡単な)メカニズムが存在していたと私は考えていませんでした。私はそれが驚かないとは思わない。結局のところ、チームコミュニケーションには本当に影響しているようです。私はチームの誰もがそれをより明白に保つために余分なオプションが好きです! – HotN

0

本当に必要な場合(私はそれを真剣に疑っています)あなたがそれを行うことができる唯一の方法は反射です。

アプリケーションがAssemblyのすべてのメソッドとクラスのコードのスキャンを開始し、禁止されたWebClientクラスを使用していないことを確認します。

私はあなたがそれをしないだろうと思います...

+1

ああ、それが唯一の選択肢ならば、あなたは正しい。私はすべての開発者が実行時にそれを行うよりも、コードを正しく実装することを忘れないことを願っています。 – HotN

1

これを行う最善の方法は、すべてのコードを確認し、WebClientが使用されていないことを確認することです。別の方法として、夜間の作業をスケジュールし、プロジェクト内の各ファイルを検索してMyWebClientの代わりにWebClientを使用しているかどうかを確認する方法があります(Roslynを使用する方が簡単かもしれません)。要するに、これはコードの問題ではない(またはそうでなければならない)ことで、トレーニングの問題でなければならないということです。

関連する問題