我目前在从覆盖的公共方法访问私有方法时遇到一些问题。
我的情况是这样的:我有一个编译的 .dll 文件,它基本上由这个组成
public class OriginalHandler
{
public virtual void Request()
{
RedirectIfConditionIsFulfilled()
this.PeformRequest()
}
protected virtual bool PeformRequest()
{
}
private static void RedirectIfConditionIsFulfilled()
{
}
}
我需要改变方法PeformRequest()
,所以我创建了一个公共类,它继承OriginalHandler
并覆盖了方法:
public class ModifiedOriginalHandler : OriginalHandler
{
protected override bool PeformRequest()
{
}
}
为确保此方法不违反“影响”范围,我必须确保它仅在某些站点上得到评估,我们使用它来确保 HttpRequestProcess 仅影响使用此的所需站点
namespace Sitecore.Sharedsource.Pipelines.HttpRequest
{
using System.Collections.Generic;
using Assert = Sitecore.Diagnostics.Assert;
using S = Sitecore;
public abstract class SiteSpecificHttpRequestProcessor: S.Pipelines.HttpRequest.HttpRequestProcessor
{
public abstract List<string> _sites;
public sealed override void Process(S.Pipelines.HttpRequest.HttpRequestArgs args)
{
Assert.ArgumentNotNull(args, "args");
if (S.Context.Site == null || !this._sites.FirstOrDefault(S.Context.Site.Name))
{
return;
}
this.DoProcess(args, this._sites.FirstOrDefault(S.Context.Site.Name));
}
protected abstract void DoProcess(S.Pipelines.HttpRequest.HttpRequestArgs args, string);
}
}
所以包括我ModifiedOriginalHandler
的包括这个
public class SiteSpecificModifiedOriginalHandler: SiteSpecificHttpRequestProcessor
{
Public override List<String> _sites => new[]
{
"www.only.com" , "www.boat.com"
};
public virtual HttpContext GetHttpContext()
{
return HttpContext.Current;
}
public override void DoProcess(HttpRequestArgs args, string)
{
var mediaRequest = new ModifiedOriginalHandler ();
var context = GetHttpContext();
var site = Sitecore.Context.Site;
if (site == null)
{
return;
}
if (string != null)
{
mediaRequest.Request(context);
}
else
{
OriginalHandler baseClass = mediaRequest;
baseClass.Request(context);
}
}
}
这是我遇到问题的地方,我可以从 SiteSpecificModifiedOriginalHandler 不调用受保护的方法PeformRequest
,
但可以调用内部调用所需函数的公共方法Request
,所以我创建了一个覆盖函数,以确保原始没有被调用但是我的修改版
public class ModifiedOriginalHandler : OriginalHandler
{
protected override bool PeformRequest()
{
}
public override void Request()
{
RedirectIfConditionIsFulfilled()
this.PeformRequest()
}
}
这是我遇到问题的地方,RedirectIfConditionIsFulfilled
是一个私有方法,我不能这样调用这个方法。我可以在我的重写函数中删除这个调用,但这需要RedirectIfConditionIsFulfilled
被删除,这会改变我不想做的原始功能。
那么我该如何克服呢?
如何在覆盖的公共方法中访问私有方法?