我正在开展一个项目,我需要为自定义实现WebClient
扩展MyWebClient
。
我还需要确保MyWebClient
是项目上任何开发人员实现的唯一版本,并且没有人使用基础WebClient
类。
是否可以阻止使用WebClient
,考虑到它不是我有权访问的代码?
答案 0 :(得分:2)
根据您需要的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;
}
}
答案 1 :(得分:1)
执行此操作的最佳方法是对所有代码进行代码检查,并确保未使用WebClient。另一种选择是安排夜间任务并从源代码控制中提取并搜索项目中的每个文件,看看他们是否使用WebClient而不是MyWebClient(使用Roslyn可能更容易)。最重要的是,这不是代码问题(或不应该是)它应该是一个培训问题。
答案 2 :(得分:0)
如果你真的需要它,(我非常怀疑它)你能做到的唯一方法就是反思。
当应用程序开始扫描Assembly
中所有方法和类的代码时,检查它们是否使用了禁用的WebClient
类。
我想你不会这样做......
答案 3 :(得分:0)
如果您使用的是ReSharper,则可以使用“使用模式搜索”功能,并将其设置为只需按下神奇的ALT +即可自动将WebClient
代码转换为MyWebClient
代码输入快捷方式!
请参阅:http://www.jetbrains.com/resharper/webhelp/Reference__Search_with_Pattern.html