[英]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.