如何防止使用 .NET 基类
本文关键字:NET 基类 何防止 | 更新日期: 2023-09-27 18:28:22
我正在处理一个项目,我需要为自定义实现扩展WebClient
,MyWebClient
.
我还需要确保 MyWebClient
是项目上任何开发人员实现的唯一版本,并且没有人使用基WebClient
类。
是否可以防止使用WebClient
,考虑到它不是我有权访问的代码?
根据所需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