我通过NuGet在个人项目中使用第三方开源Object Comparer util。我遇到的问题是在Context
类中有一个我需要能够修改的静态只读属性(Default
):
public class Context :
IContext
{
private static Context _default;
public static Context Default {
get {
if( _default==null )
_default = GetDefaultContext();
return _default;
}
}
private Guid _id;
public Guid Id { get { return _id; } }
internal static Context GetDefaultContext() {
//....Initializing the context here, e.g. assign a GUID
var ctx = new Context();
_id = GetGuid();
}
在我的Compare
方法中,我称之为:
var myContext = Context.Default;
问题是我需要为每个Context
电话初始化Compare
(例如,不同的GUIDS)。
类似的东西:
var myContext = Context.GetDefaultContext();
但不幸的是GetDefaultContext
被标记为内部,所以我没有公开访问它。
我的问题是如何在不修改源代码的情况下解决此限制,并且每次使用不同的GUID获得不同的初始化Context
?因为它现在的方式我总是在开头使用相同的GUID初始化相同的Context。
答案 0 :(得分:1)
既然您知道私有字段的名称,为什么不将其设置为null并使原始代码自行完成工作呢?
Context context = new Context ();
context.GetType().GetField("_default", BindingFlags.Static | BindingFlags.NonPublic).SetValue(null, null);
现在,无论何时再次调用默认属性,它都会再次调用GetDefaultContext
。