C# 重写dll类属性集
在我的项目中,我使用了一千个封闭DLL类的实例C# 重写dll类属性集,c#,overriding,C#,Overriding,在我的项目中,我使用了一千个封闭DLL类的实例 public sealed class DllClass { public DllClass(); public string DllClassProperty {get; set;} } DllClassProperty集被使用了一千次,如果在Web.config上设置了参数,我需要重写该值集 我找到了这个接口,但我无法使用它,因为我没有访问该类的权限,也无法扩展它 我在想,如果有这样的方法,但我认为这在C#中是不可能的: s
public sealed class DllClass
{
public DllClass();
public string DllClassProperty {get; set;}
}
DllClassProperty集被使用了一千次,如果在Web.config上设置了参数,我需要重写该值集 我找到了这个接口,但我无法使用它,因为我没有访问该类的权限,也无法扩展它 我在想,如果有这样的方法,但我认为这在C#中是不可能的:
setPropertyListener上的公共类
{
公共void OnSetProperty(PropertyInfo PropertyInfo,DllClass实例)
{
//设置另一个值,例如:“新值”
}
}
如何覆盖DllClassProperty中设置的值?有可能吗?令人惊讶的是,有一种方法可以解决你的问题。这并不漂亮,但它满足了你问题的约束条件
步骤1:围绕DllClass
创建一个包装器,即一个新类mydllclasswapper
,其行为与DllClass
完全相同,只是要实现的更改除外。这通常是通过重建DllClass
的公共接口,并将所有操作转发到私有DllClass
实例来完成的
现在,您只需在当前使用dllclasswrapper
的任何地方使用MyDllClassWrapper即可。您在评论中提到,您不想更改所有这些调用,因此让我们实现自动化:
步骤2:用于在编译后步骤中通过引用mydllclasswapper
自动替换对DllClass
的所有引用:
[assembly: Substitute(typeof(DllClass), typeof(MyDllClassWrapper))]
但是,请注意,每个阅读您的代码的人都会完全困惑,因为源代码指向DllClass
,而使用mydllclasswapper
。因此,我建议您仅将此技术用作临时解决方法,直到您找到时间将对DllClass
的所有引用完全替换为对mydllclasswapper
的引用。如果未另外设置值,是否可以修改DllClass
类本身以查阅web.config?“我需要覆盖该值”您的意思是您需要覆盖该值吗?因此“如果在Web.config上设置了参数”。您希望在所有“数千个实例”中提供DllClassProperty
“新的价值观?我说的对吗?@JonSkeet没有。这是一个封闭的dllRight-我建议你在你的问题中加入这一点。您是否能够将创建实例的所有地方替换为对工厂方法的调用(在您自己的代码中),该工厂方法创建实例并基于web.config填充属性?如果您无法更改DllClass
中的代码或使用DllClass
的代码,那你就别无选择了。这是一种类似适配器设计模式的方法吗?@FaizanRabbani:我认为匹配的设计模式将是最优秀的。@Heinzi!这正是我需要的。正如你所说,我会把它作为临时解决办法。实际上,我将使用包装器进行开发验证。此属性是电子邮件属性,我将设置我的电子邮件以验证项目发送的所有电子邮件。谢谢。
[assembly: Substitute(typeof(DllClass), typeof(MyDllClassWrapper))]