使用Microsoft的代码合约在接口上编写代码合约时,会创建一个包含所有合同的抽象合同类:
using System.Diagnostics.Contracts;
[ContractClass(typeof(ICollectionContract<>))]
public interface ICollection<T> {
// Interface methods
}
[ContractClassFor(typeof(ICollection<>))]
abstract class ICollectionContract<T> : ICollection<T> {
// Interface contracts
}
Microsoft约定将合约类命名为与接口相同,但后缀为Contract
,例如ICollectionContract<T>
。
但是,Resharper不是命名的粉丝 - 部分原因是抽象类的I
前缀。
有没有办法创建一个命名样式,告诉Resharper合同类(用ContractClassFor
注释的那些)必须与接口名称相同但后缀为Contract
?
答案 0 :(得分:1)
这不是你可以配置ReSharper开箱即用的东西,你必须创建一个自定义插件。
您必须创建ElementProblemAnalyzer<IInterfaceDeclaration>
,然后检查它是否包含[ContractClass]
属性,然后确保其名称正确。您还可以创建QuickFix建议以重命名界面。
良好的开端类似于AsyncSuffix plugin - 它有一个很好的实现,可以分析缺少Async
后缀的异步方法,并提供添加它。查看针对您自己的插件的想法的实现。