我在我的项目中使用了一千个封闭的 DllClass 实例。
public sealed class DllClass
{
public DllClass();
public string DllClassProperty {get; set;}
}
DllClassProperty 设置已使用一千次,如果在 Web.config 上设置了参数,我需要覆盖设置的值。
我找到了这个界面INotifyPropertyChanged https://learn.microsoft.com/en-us/dotnet/framework/wpf/data/how-to-implement-property-change-notification,但我无法使用它,因为我无权访问该类,也无法扩展它。
我在想,是否有办法做这样的事情,但我认为这在 C# 中是不可能的:
public class OnSetPropertyListener<DllClass>
{
public void OnSetProperty(PropertyInfo propertyInfo, DllClass instance)
{
// set another value, for example: "new value"
}
}
如何覆盖 DllClassProperty 中设置的值?是否可以?
令人惊讶的是,有is解决你的问题的方法。它不漂亮,但它满足你的问题的限制。
Step 1:创建一个包装器DllClass
,即一个新类MyDllClassWrapper
,其行为完全类似于DllClass
除了您想要实施的更改之外。这通常是通过重建公共接口来完成的DllClass
并将所有操作转发给私人DllClass
实例。
现在你只需要使用MyDllClassWrapper
您当前使用的任何地方DllClass
。您在评论中提到您不想更改所有这些调用,所以让我们将其自动化:
Step 2: Use 替补福迪 https://github.com/tom-englert/Substitute.Fody自动替换所有引用DllClass
通过引用MyDllClassWrapper
在编译后步骤中:
[assembly: Substitute(typeof(DllClass), typeof(MyDllClassWrapper))]
但请注意,每个阅读您代码的人都会完全困惑,因为源代码指向DllClass
, but MyDllClassWrapper
被用来代替。因此,我建议您仅将此技术用作临时解决方法直到您找到时间干净地替换所有引用DllClass
并参考MyDllClassWrapper
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)