private void EnsureRequiredAspect(RequiredAspectAttribute requiredAspAttrib)
{
bool hasAspect = this.aspects.Any(asp => asp.GetType() == requiredAspAttrib.AspectClassType);
if (hasAspect)
{
return;
}
if (requiredAspAttrib.InstantiateIfMissing == WhenRequiredAspectIsMissing.DontInstantiate)
{
throw new Exception("Aspect {0} is required by \"{1}\", but is not in the caller's aspect collection.".SmartFormat(
requiredAspAttrib.AspectClassType.FormatCSharp(),
this.InterceptedCallMetaData.GetMethodSignature()
)
);
}
Aspect missingAspect = requiredAspAttrib.InstantiateAspect();
this.AddAspect(missingAspect, requiredAspAttrib.InstantiateIfMissing == WhenRequiredAspectIsMissing.InstantiateAndAppend);
}