簡體   English   中英

Postsharp第三方課

[英]Postsharp 3rd party class

我需要在第三方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? 謝謝

假設你創建了OnMethodBoundary方面 ,在方法的末尾添加一些自定義代碼:

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

要將此方面應用於第三方程序集,可以將其應用於項目並將AttributeTargetAssemblies屬性設置為第3方程序集的名稱。 這將導致PostSharp修改您的程序集並使用您的自定義代碼修飾對第三方程序集的調用。

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

我想這對Castle Dynamic Proxy來說是一個很好的例子。

如果第三方類沒有被密封(因此,它們允許繼承和目標方法或屬性是多態的),您應該能夠創建運行時代理(即運行時派生類)。

最后,您將創建一個工廠方法,該方法將返回整個第三方類的代理實例。

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沒有正式支持這種情況 - 所以如果遇到任何問題,你就可以自己動手了。

您可以使用PostSharp文檔調用Method Interception的技術 它的工作原理是修改你的代碼 - 在你調用第三方代碼的網站上插入額外的代碼,而不是觸及第三方代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM