你能在不使用属性的情况下在PostSharp应用方面吗?



我知道在Castle Windsor中,你可以使用代码而不是向类应用属性来注册方面(当在Windsor中使用AOP的方法拦截时)。在Postsharp中也是一样的吗?这是一个偏好的事情,但更喜欢在一个地方有与接口/对象匹配的方面,而不是到处都有属性。

更新:我想知道我是否可以将方面分配给类似的接口/对象:

container.Register(
        Component
        .For<IService>()
        .ImplementedBy<Service>()
        .Interceptors(InterceptorReference.ForType<LoggingAspect>()).Anywhere
   );

如果你能做到这一点,你就可以选择不必在程序集/类/方法上放置属性来应用方面。然后我可以有一个代码文件/类,其中包含哪些方面应用于哪个类/方法等。

是。您可以使用组播(http://www.sharpcrafters.com/blog/post/Day-2-Applying-Aspects-with-Multicasting-Part-1.aspx, http://www.sharpcrafters.com/blog/post/Day-3-Applying-Aspects-with-Multicasting-Part-2.aspx),也可以使用方面提供程序(http://www.sharpcrafters.com/blog/post/PostSharp-Principals-Day-12-e28093-Aspect-Providers-e28093-Part-1.aspx, http://www.sharpcrafters.com/blog/post/PostSharp-Principals-Day-13-e28093-Aspect-Providers-e28093-Part-2.aspx)。

的例子:

    using System;
    using PostSharp.Aspects;
    using PostSharp.Extensibility;
    [assembly: PostSharpInterfaceTest.MyAspect(AttributeTargetTypes = "PostSharpInterfaceTest.Interface1", AttributeInheritance = MulticastInheritance.Multicast)]
    namespace PostSharpInterfaceTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Example e = new Example();
            Example2 e2 = new Example2();
            e.DoSomething();
            e2.DoSomething();
            Console.ReadKey();
        }
    }
    class Example : Interface1
    {
        public void DoSomething()
        {
            Console.WriteLine("Doing something");
        }
    }
    class Example2 : Interface1
    {
        public void DoSomething()
        {
            Console.WriteLine("Doing something else");
        }
    }
    interface Interface1
    {
        void DoSomething();
    }
    [Serializable]
    class MyAspect : OnMethodBoundaryAspect
    {
        public override void OnEntry(MethodExecutionArgs args)
        {
            Console.WriteLine("Entered " + args.Method.Name);
        }
    }
}

如果您有复杂的需求来确定哪些类型获得某些方面,我建议您考虑创建一个方面提供程序。

看一下LOOM。NET,你有一个后编译器和一个运行时编织器。使用后者,您可以准确地归档您想要的内容。

应该可以使用PostSharp XML配置。XML配置是项目加载器中Plug-in和Project模型的统一。

.psproj的描述可以在http://www.sharpcrafters.com/blog/post/Configuring-PostSharp-Diagnostics-Toolkits.aspx找到。

注意,我只看到了PostSharp工具包如何使用这个XML配置的例子。但它应该以同样的方式为自定义方面工作。

警告:我注意到从Nuget安装PostSharp工具包会覆盖现有的psproj文件。所以别忘了备份。

相关内容

最新更新