В настоящее время у меня возникают проблемы с доступом к закрытому методу из переопределенного публичного метода.
Моя ситуация такова: у меня есть скомпилированный файл .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
, что изменило бы исходную функциональность, чего я не хочу делать.
Так как мне преодолеть это?
Как получить доступ к приватному методу в переопределенном публичном методе?