锐后第三方职业
本文关键字:第三方 | 更新日期: 2023-09-27 18:11:40
我需要装饰所有的方法从类在第三方DLL。我使用c# 5.0和postsharp 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
}
}
做某事总是一样的。我不想复制所有丑陋的方法。我知道我可以用谷歌搜索什么吗?谢谢你
假设您创建了onmethodboundborder方面,并在方法末尾添加了一些自定义代码:
[Serializable]
public class MyTestAttribute : OnMethodBoundaryAspect
{
public override void OnSuccess(MethodExecutionArgs args)
{
// Do something.
}
}
要将此方面应用于第三方程序集,您可以在项目中应用它,并将AttributeTargetAssemblies属性设置为第三方程序集的名称。这将导致PostSharp修改您的程序集,并使用您的自定义代码修饰对第三方程序集的调用。
[assembly: MyTest(AttributeTargetAssemblies = "SomeLibrary")]
我想这将是一个很好的城堡动态代理案例。
如果第三方类不是密封的(因此,它们允许继承,目标方法或属性是多态的),你应该能够创建一个运行时代理(即运行时派生类)。
最后,您将创建一个工厂方法,该方法将返回整个第三方类的代理实例。
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文档中称为方法拦截的技术。它的工作原理是修改你的代码——在你调用第三方代码的地方插入额外的代码,而不是触摸第三方代码。