2009-02-05 66 views
1

我们在我们的代码到处有这样的模式:如何用属性替换锅炉板代码?

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

我怎样才能用在需要交谈的Web服务的功能属性替换此锅炉板代码? (我回想起我很久以前在Java中使用Hibernate做了一些东西,并且有一些可以使用的“Transation”注释,它会自动插入一些try ... catch锅炉代码到函数中)使用{}已经很不错了,但完全没有它会很好......拥有一个属性也有助于将该功能记录为与Web服务对话的功能。

编辑:AOP会诀窍吗?

+0

'使用'条款是语法糖的尝试...最后块。您正在寻求一个本身已经很短的快捷方式。属性声明会缩短多少?这值得么?已经不够“使用”了吗? – 2009-02-05 20:43:54

回答

0

我认为你可以做的最好的事情就是创建一个快捷方式将代码作为代码插入。你不能通过属性来将变量声明强加给方法。换句话说,属性只能告诉你关于代码的事情。他们不能改变代码本身。

1

在spring.net中查看aspects

+0

是的,我希望我们的项目使用Spring.NET .... 不幸的是它是纯.NET,没有依赖关系,它不是一个新项目,所以引入Spring.NET已经太迟了。那么除非使用aop部分真的很容易。 – dgrant 2009-02-05 20:44:36

1

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

0

“Aspect”类型的东西...这是一种用您选择的代码来修饰给定方法的方法。如果您想处理例如在调用你的方法之后,方面和代码必须有权访问服务。这也意味着你几乎无法控制服务类的生命周期。

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

DateTime serverTime; 
context.UseService<IInfoService>(s=>serverTime = s.GetTime());