gpt4 book ai didi

c# - 覆盖 dll 类属性集

转载 作者:太空狗 更新时间:2023-10-30 00:48:16 25 4
gpt4 key购买 nike

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

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

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

我找到了这个界面 INotifyPropertyChanged ,但我不能使用它,因为我无权访问该类,也无法扩展它。

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

public class OnSetPropertyListener<DllClass>
{
public void OnSetProperty(PropertyInfo propertyInfo, DllClass instance)
{
// set another value, for example: "new value"
}
}

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

最佳答案

令人惊讶的是, 有一种方法可以解决您的问题。它不是很漂亮,但它满足了你问题的限制。

第 1 步:围绕 DllClass 创建一个包装器,即一个新类 MyDllClassWrapper,其行为与 DllClass 完全相同> 除了您要实现的更改。这通常是通过重建 DllClass 的公共(public)接口(interface)并将所有操作转发到私有(private) DllClass 实例来完成的。

现在您只需在当前使用 DllClass 的任何地方使用 MyDllClassWrapper。您在评论中提到您不想更改所有这些调用,所以让我们将其自动化:

第 2 步:使用 Substitute.Fody在编译后步骤中通过对 MyDllClassWrapper 的引用自动替换对 DllClass 的所有引用:

[assembly: Substitute(typeof(DllClass), typeof(MyDllClassWrapper))]

但请注意,每个阅读您代码的人都会彻底混淆,因为源代码指向 DllClass,但使用了 MyDllClassWrapper反而。因此,我建议您仅将此技术用作临时解决方法,直到您找到时间将所有对 DllClass 的引用完全替换为对 MyDllClassWrapper 的引用>.

关于c# - 覆盖 dll 类属性集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48460584/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com