之前我曾问过这个问题,但我没有做好解释,所以我又去了......
我有类似这样的课程
public class BaseClass {
public void Setup() { Do something... }
public void TearDown() { Do something else...}
{
public class SubClass : BaseClass {
public Object1 Method1(Object2 o2) {
Setup();
Do something specific to this method...
TearDown();
return object1;
}
public Object3 Method2(Object4 o4, Object5 o5) {
Setup();
Do something different here...
TearDown();
return object3;
}
}
还有其他类扩展BaseClass,这些类中的方法也必须以类似的方式运行Setup和TearDown。
我想要做的就是不必为我创建的每个方法调用Setup和TearDown。我想简单地做这样的事情:
public class BaseClass {
[RunBeforeEveryMethod]
public void Setup() { Do something... }
[RunAfterEveryMethod]
public void TearDown() { Do something else...}
{
public class SubClass : BaseClass {
public Object1 Method1(Object2 o2) {
Do something specific to this method...
return object1;
}
public Object3 Method2(Object4 o4, Object5 o5) {
Do something different here...
return object3;
}
}
我发现其他类似this和this的帖子。但我的情况有点不同,因为:
答案 0 :(得分:2)
您可以使用AOP来完成。
我建议您查看在运行时执行此操作的文章http://www.codeproject.com/Articles/8436/Intercepting-method-calls-in-C-an-approach-to-AOSD。
你也可以使用像PostSharp或Fody这样的IL编织。
答案 1 :(得分:1)
是的,您可以编写一个功能来完成您的设置和拆卸,并采取不同的方式。作为参数。
protected T Wrapper<T>(Func<T> something)
{
Setup();
try
{
return something();
}
finally
{
Teardown();
}
}
与lambda函数一起,您现在可以安全地完成任务:
public Object1 Method1(Object2 o2)
{
return Wrapper<Object1>(() =>
{
Do something specific to this method...
return object1;
});
}
public Object3 Method2(Object4 o4, Object5 o5)
{
return Wrapper<Object3>(() =>
{
Do something different here...
return object3;
});
}
这种技术一直被JavaScript程序员使用。