FxCop有 CollectionPropertiesShouldBeReadOnly规则,如果您的班级有某种形式,则会抱怨客户可以设置的集合属性。相反,它建议将属性设置为只读,并提供Clear()方法和Add()或AddRange()方法来更改集合的内容。

我同意这样做可以实现更清晰,更受控制的界面,但我正在努力使该界面与Spring框架协同工作。如果我想配置一个具有协作者集合的对象,我必须公开一些集合属性以将协作者注入。我查看了 Spring文档,我可以没有办法告诉Spring调用AddRange()方法,我错过了什么吗?

现在,我将排除警告,并注意弹簧配置是必要的。

更新,因为我在过去两个月里没有得到任何小点,我在 FxCop论坛

有帮助吗?

解决方案

如果collection属性只暴露了getter,我们将假设您使用的FxCop推荐模式已被使用并添加到集合中。第一种模式也受支持。

对于泛型集合,仅当公开的属性属于IList类型时才有效。我们为下一个版本提供了 JIRA问题来解决此问题。顺便说一下,这是基类库中非常常见的模式(你可能知道......),这是我们第一次遇到需要在.NET 1.1中支持这种风格的地方(它没有受到上面列出的限制) 。

干杯, 标记

其他提示

问题是否与您想象的一样糟糕?我的理解是,如果你有这样的读/写属性,FxCop会抱怨:

public List<Foo> Items { get; set; }

...因为您班级的用户可以这样做:

myInstance.Items = new List<Foo>();

显然,您不希望班级用户完全重新分配列表。因此,FxCop推荐这种模式:

private List<Foo> _items = new List<Foo>();
public List<Foo> Items { get { return _items; } }

现在,您班级的用户只能添加和删除列表中的项目,而不是使用新的List实例覆盖它。

Spring.NET如何实现其集合属性?他们真的像我的第一个例子那样读/写吗?如果是这样,看到他们使用这种模式的用例会很有趣,因为它似乎不对。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top