是否有一个实际的示例说明它们如何在.NET中的方法参数上使用属性?
我知道这是有可能的,并且我在文档中看到了简单的示例,但是它们在野外使用吗?
我一直在类和方法级别使用属性,但从未在方法参数上使用它们。有哪些实际示例,以及使用的原因?
请注意,我对看到教科书示例不感兴趣。那里有很多。我想看看它为我们解决了一个特定问题的实际原因。
编辑:让我们搁置有关是否首先使用属性的讨论。我了解有些人不喜欢他们,因为他们"弄脏"了他们的代码。那是一个不同的讨论!
解决方案
例如,我们可以为每个参数创建一个ValidatorAttribute,然后在调用该方法之前,我们可以反映参数属性并进行参数验证。如果一切正常,然后调用该方法。
我还没有亲自使用过它们,但是Scott Gu的有关ASP.NET MVC Preview 5的帖子显示了用于声明动作方法的模型绑定程序的参数属性。
链接位于:http://weblogs.asp.net/scottgu/archive/2008/09/02/asp-net-mvc-preview-5-and-form-posting-scenarios.aspx
他指出,该属性在Preview 5中尚不可用,但应该在以后的版本中可用。
(我在这里留下了这个答案,以防其他人发现它对PostSharp有用,但实际上并不能正确回答这个问题!我误解了这个问题,因为它询问的是方法属性而不是类属性。 ,生成的SOAP类使用参数属性。对于存储过程,LINQ to SQL使用返回属性,并且也可以使用参数属性。)
我已经将它们与PostSharp一起使用,尽管到目前为止,仅在快速演示中才可以使用它们(我尚未在生产中使用PostSharp)。
有关更多详细信息,请参见我的博客文章。
哦,当然,NUnit测试到处都指定[Test] :)
乔恩
Castle Monorail城堡已经使用多年来对请求参数进行数据绑定。参见http://www.castleproject.org/MonoRail/documentation/trunk/integration/ar.html
依赖注入是一个很好的示例方案。
ObjectBuilder(一个可靠的注入容器,是P&P Enterprise Libary的一部分,不久将被Unity取代)在整个地方使用它们来确定容器在运行时应注入的内容。这是一个控制器类的构造函数的快速示例,该控制器类具有一个状态值(从活动的状态提供者注入,通常是HttpSession)以及两个服务依赖项(定位器和授权服务):
public class ShellController : ControllerBase, IShellController { public ShellController([StateDependency("State")] StateValue<ShuttleState> state, [ServiceDependency] IHttpContextLocatorService contextLocator, [ServiceDependency] IAuthorizationService authService) : base(state, contextLocator, authService) { // code goes here } }
单元测试框架广泛使用它们:
要在nUnit或者MSTest中执行任何操作,必须使用[TestFixture]或者[TestClass]属性装饰方法。
我的最爱? MbUnit的[DataFixture]属性:使我们可以在属性内直接或者在外部资源中使用特定的测试数据来播种测试用例。