Postsharp第三方课

时间:2014-07-04 14:47:47

标签: c# postsharp

我需要在第三方DLL中从类中装饰所有方法。我使用C#5.0和postharp 3.1。我当然可以这样做。

//In 3rd party library
class A
{
    public virtual int foo(string a) {}

    public virtual void foo2() {}
}

//In my
class B : A
{
    public override int foo(string a) {
        int result = base.foo(a);
        //Do something
        return result;
    }

    public override void foo2() {
        base.foo2();
        //Do something
    }
}

做某事总是一样的。
 我不想复制所有丑陋的方法。有些人想知道我可以使用什么或google?谢谢

4 个答案:

答案 0 :(得分:3)

假设您创建OnMethodBoundary aspect以在方法的末尾添加一些自定义代码:

[Serializable]
public class MyTestAttribute : OnMethodBoundaryAspect
{
    public override void OnSuccess(MethodExecutionArgs args)
    {
        // Do something.
    }
}

要将此方面应用于第三方程序集,您可以将其应用于项目中,并将AttributeTargetAssemblies属性设置为第3方程序集的名称。这将导致PostSharp修改您的程序集并使用您的自定义代码修饰对第3方程序集的调用。

[assembly: MyTest(AttributeTargetAssemblies = "SomeLibrary")]

答案 1 :(得分:1)

我想这对Castle Dynamic Proxy来说是个好例子。

如果第三方类未被密封(因此,它们允许继承和目标方法或属性是多态的),您应该能够创建运行时代理(即运行时派生类)。

最后,您将创建一个工厂方法,该方法将返回整个第三方类的代理实例。

答案 2 :(得分:1)

PostSharp在CIL级别上工作,因此可以使用命令行工具(postsharp.4.0-x86.exe)并将方面编织到几乎任何程序集中。

它是这样的:

postsharp.4.0-x86 /X:MyDependency.PostSharp.config MyDependency.dll

配置文件是常规的PostSharp配置文件(如.pssln和.psproj):

http://doc.postsharp.net/configuration-schema

但是,需要注意第三方库的许可。

编辑:作为旁注 - PostSharp并未正式支持此方案 - 如果您遇到任何问题,您将自行支持。

答案 3 :(得分:1)

您可以使用PostSharp文档调用Method Interception的技术。它的工作原理是修改你的代码 - 在你调用第三方代码的网站上插入额外的代码,而不是触及第三方代码。