覆盖dll类属性集

时间:2018-01-26 11:34:27

标签: c#

我在项目中使用了一千个已关闭的DllClass实例。

id_program

DllClassProperty set使用了数千次,如果在Web.config上设置了参数,我需要覆盖值集。

我找到了这个界面INotifyPropertyChanged,但我无法使用它,因为我无法访问该课程而我无法对其进行扩展。

我在思考,如果有办法做这样的事情,但我认为这在C#中是不可能的:

public sealed class DllClass 
{
    public DllClass();
    public string DllClassProperty {get; set;}
}

如何覆盖DllClassProperty中设置的值?有可能吗?

1 个答案:

答案 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