如何防止使用 .NET 基类

本文关键字:NET 基类 何防止 | 更新日期: 2023-09-27 18:28:22

我正在处理一个项目,我需要为自定义实现扩展WebClientMyWebClient .

我还需要确保 MyWebClient 是项目上任何开发人员实现的唯一版本,并且没有人使用基WebClient类。

是否可以防止使用WebClient,考虑到它不是我有权访问的代码?

如何防止使用 .NET 基类

根据所需WebClient的功能,可以考虑将MyWebClient实现为仅公开允许从WebClient成员使用的方法的代理。

例:

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(例如,请参阅@gdoron建议(,但有助于避免错误地使用它。

编辑:

从您的最后一条评论中,我认为您所需要的只是一个工厂,它将为您的所有WebClient实例设置用户代理。

然后,根据您的组织,您将需要就其使用情况进行强有力的沟通(也许还需要一个搜索工具来查找项目中new WebClient()(。

public static class WebClientFactory
{
    public static WebClient Create()
    {
        WebClient result = new WebClient();
        result.Headers.Add("My Fancy User Agent");
        return result;
    }
}
执行此操作的最佳

方法是对所有代码进行代码审查,并确保未使用 WebClient。另一种选择是安排夜间任务并从源代码管理中提取,并搜索项目中的每个文件,以查看它们是否使用 WebClient 而不是 MyWebClient(使用 Roslyn 可能更容易(。最重要的是,这不是代码问题(或不应该是(,而应该是一个培训问题。

如果你真的需要它,(我严重怀疑(你能做到的唯一方法就是反思。

当应用程序启动时,扫描Assembly中所有方法和类的代码,并检查它们是否不使用禁止的WebClient类。

我猜你不会这样做...

如果您使用的是ReSharper,则可以使用"使用模式搜索"功能,并将其设置为只需按神奇的ALT + Enter快捷方式即可自动将WebClient代码转换为MyWebClient

请参阅:http://www.jetbrains.com/resharper/webhelp/Reference__Search_with_Pattern.html