postsharp是否提供了一种简单的方法来应用一组方面
Does postsharp provide a simple way to apply a group of aspects
我找了又找,虽然看起来很简单,但我什么也没找到。
基本上我有 4 或 5 个方面,它们通常一起应用于相同的方法,但也需要保持分开,因为它们在许多地方也需要单独使用。
postsharp 是否提供任何表示 'Adding this aspect to a method is the equivalent of adding these 4 other aspects together' 的方式?
我知道你可以将方面组合成一个方面,但我不希望在组合方面和非组合方面中有重复的代码,我同样不希望在方法上声明的一整堆方面混乱.
如果有人能提出任何建议,那将是一个很大的帮助。
提前致谢。
最简单的选择是在占位符方面实现 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 开始可用。
我找了又找,虽然看起来很简单,但我什么也没找到。
基本上我有 4 或 5 个方面,它们通常一起应用于相同的方法,但也需要保持分开,因为它们在许多地方也需要单独使用。
postsharp 是否提供任何表示 'Adding this aspect to a method is the equivalent of adding these 4 other aspects together' 的方式?
我知道你可以将方面组合成一个方面,但我不希望在组合方面和非组合方面中有重复的代码,我同样不希望在方法上声明的一整堆方面混乱.
如果有人能提出任何建议,那将是一个很大的帮助。 提前致谢。
最简单的选择是在占位符方面实现 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 开始可用。