代码之家  ›  专栏  ›  技术社区  ›  Renan Araújo

重写dll类属性集

  •  4
  • Renan Araújo  · 技术社区  · 7 年前

    在我的项目中,我使用了1000个封闭DllClass的实例。

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

    DllClassProperty集被使用了1000次,如果在Web上设置了参数,我需要重写该值集。配置。

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

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

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

    如何重写DllClassProperty中设置的值?有可能吗?

    1 回复  |  直到 5 年前
        1
  •  6
  •   Heinzi    7 年前

    令人惊讶的是 解决问题的方法。这并不漂亮,但它满足了你问题的限制。

    步骤1 :围绕创建包装 DllClass ,即一个新类 MyDllClassWrapper ,其行为与 DLL类 除了要实现的更改之外。这通常是通过重建 DLL类 将所有操作转发给私人 DLL类 例子

    现在你只需要使用 MyDllClassWrapper 您当前使用的任何地方 DLL类 . 您在评论中提到,您不想更改所有这些调用,所以让我们自动执行以下操作:

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

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

    但请注意,阅读您的代码的每个人都会 彻底糊涂了 ,因为源代码指向 DLL类 但是 MyDllClassWrapper 而是使用。因此,我建议您仅将此技术用作 临时解决方法 直到找到时间彻底替换对的所有引用 DLL类 参考 MyDllClassWrapper .