0

我们的代码中到处都有这种模式:

using (ServiceAccess ws = new ServiceAccess())
{
//...
//code here to talk to webservice ws
//...
}

如何将这个样板代码替换为需要与 Web 服务通信的函数的属性?(我回想起很久以前我在 Java 中使用 Hibernate 做一些事情的时候,并且有一些“Transation”注释你可以使用它会自动插入一些 try...catch 样板代码到函数中.) using {} 已经很不错了,但完全没有它会很好......拥有一个属性还有助于将函数记录为一个与 Web 服务对话的功能,而不是与之对话的功能。

编辑:AOP 能解决问题吗?

4

4 回答 4

1

看看spring.net 中的方面

于 2009-02-05T20:42:13.547 回答
1

您还可以查看PostSharp。我不会让你使用属性来实现方面,你可以用它来实现你想要的。

于 2009-02-05T20:44:12.717 回答
0

“方面”类型的东西......这是一种用您选择的代码装饰给定方法的方法。如果您想在调用您的方法之后进行处理,则方面以及代码必须能够访问服务。这也意味着您几乎无法控制服务类的生命周期。

在最近的一些代码中,我为我的类提供了一个上下文,通过它可以获得服务实例。它们提供给您可能通过的代表。任何处置都可以在您关闭后进行...

DateTime serverTime;
context.UseService<IInfoService>(s=>serverTime = s.GetTime());
于 2009-02-05T22:07:50.833 回答
0

我认为您能做的最好的事情就是创建一个快捷方式,将该代码作为片段插入。您不能通过属性将变量声明硬塞到方法中。或者换一种说法,属性只能告诉你关于代码的事情。他们不能更改代码本身。

于 2009-02-05T20:39:14.443 回答