gpt4 book ai didi

c# - postsharp是否提供了一种简单的方法来应用一组方面

转载 作者:太空宇宙 更新时间:2023-11-03 10:34:43 25 4
gpt4 key购买 nike

我找了又找,虽然看起来很简单,但我找不到任何东西。

基本上我有 4 或 5 个方面,它们通常一起应用于同一方法,但也需要保持分开,因为它们在许多地方也需要单独。

postsharp 是否提供任何方式来说明“将此方面添加到方法等同于将这 4 个其他方面添加在一起”?

我知道您可以将方面组合成一个方面,但我不希望在组合方面和非组合方面中有重复代码,我同样不希望在方法上声明的一整堆方面一团糟。

如果有人能提出任何建议,那将是一个很大的帮助。提前致谢。

最佳答案

最简单的选择是实现 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 之后可用。

关于c# - postsharp是否提供了一种简单的方法来应用一组方面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28235621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com