我搜索过并搜索过,但即使看起来很简单,我找不到任何东西。
基本上我有4或5个方面通常一起应用于同一个方法,但也需要保持分开,因为它们在许多地方也需要单独使用。
postsharp是否提供了任何方式来说'将此方面添加到方法相当于将这4个其他方面添加到一起'?
我知道你可以将方面组合成一个方面,但我不想在组合和非组合方面重复代码,我同样不希望上面方法声明的整个方面的混乱。 / p>
如果有人可以提出任何有用的建议。 提前谢谢。
答案 0 :(得分:2)
最简单的选择是在占位符方面实施 IAspectProvider 界面:
[Serializable]
public class CombinedAspect : MethodLevelAspect, IAspectProvider
{
public IEnumerable<AspectInstance> ProvideAspects(object targetElement)
{
yield return new AspectInstance(targetElement, new FirstAspect());
yield return new AspectInstance(targetElement, new SecondAspect());
}
}
如您所见,此界面可以是非常强大的工具。此外,您可能想知道声明中是否确实存在某个方面。这可以使用 IAspectRepositoryService 服务完成:
[Serializable]
public class CombinedAspect : MethodLevelAspect, IAspectProvider
{
private int count = 0;
public IEnumerable<AspectInstance> ProvideAspects( object targetElement )
{
IAspectRepositoryService repositoryService = PostSharpEnvironment.CurrentProject.GetService<IAspectRepositoryService>();
if ( !repositoryService.HasAspect( targetElement, typeof(FirstAspect) ) )
yield return new AspectInstance( targetElement, new FirstAspect() );
if ( !repositoryService.HasAspect( targetElement, typeof(SecondAspect) ) )
yield return new AspectInstance( targetElement, new SecondAspect() );
}
}
但是,此服务仅适用于PostSharp 4.0以后。