我在项目中使用了一千个已关闭的DllClass实例。
id_program
DllClassProperty set使用了数千次,如果在Web.config上设置了参数,我需要覆盖值集。
我找到了这个界面INotifyPropertyChanged,但我无法使用它,因为我无法访问该课程而我无法对其进行扩展。
我在思考,如果有办法做这样的事情,但我认为这在C#中是不可能的:
public sealed class DllClass
{
public DllClass();
public string DllClassProperty {get; set;}
}
如何覆盖DllClassProperty中设置的值?有可能吗?
答案 0 :(得分:6)
令人惊讶的是,是解决问题的方法。它并不漂亮,但它满足了你问题的限制。
第1步:围绕DllClass
创建一个包装,即新的MyDllClassWrapper
类,其行为与DllClass
完全相同,但您想要的更改除外实行。这通常通过重建DllClass
的公共接口并将所有操作转发到私有DllClass
实例来完成。
现在,您只需要在当前使用MyDllClassWrapper
的任何地方使用DllClass
。你在评论中提到你不想改变所有这些调用,所以让我们自动化:
第2步:使用Substitute.Fody在后编译步骤中通过引用DllClass
自动替换对MyDllClassWrapper
的所有引用:
[assembly: Substitute(typeof(DllClass), typeof(MyDllClassWrapper))]
但请注意,阅读代码的每个人都会彻底混淆,因为源代码指向DllClass
,但使用的是MyDllClassWrapper
。因此,我建议您仅将此技术用作临时解决方法,直到您找到时间干净地替换DllClass
的所有引用并引用MyDllClassWrapper
。