使用PostSharp一次验证多个项目中的类名

问题描述 投票:1回答:1

我有一个在各种名称空间中具有多个API项目的解决方案。我正在寻找一种同时验证所有API项目的方法,以检查它们中是否有一个与这些项目中的另一个类具有相同名称的类(控制器)。

假设我有以下课程:

Api1.DogController
Api1.CatController

Api2.BirdController

现在有人将新的CatController添加到Api2,所以我们有

Api2.BirdController
Api2.CatController

我希望PostShart抛出构建错误,因为CatController项目中已经存在一个名为Api1的类。而且我更希望避免将任何属性添加到应该检查的类中。我可以参考API项目的AssemblyInfo文件中的约束。

我尝试使用ScalarConstraint和类型做一些事情,像这样:

[MulticastAttributeUsage(MulticastTargets.Class)]
    public class ControllerNamesValidation : ScalarConstraint
    {
        public override void ValidateCode(object target)
        {
            var targetType = (Type)target;

            //various experiments with targetType.GetMembers() or targetType.GetNestedTypes() here...
        }
     }

但失败。

c# postsharp
1个回答
0
投票

PostSharp分别处理每个项目。可以在构建时使用ScalarConstraint在整个解决方案范围内实施规则,但是您需要将有关使用的控制器名称的信息存储在某个地方(例如文件系统或注册表)。这需要同步,这可能会增加编译时间。

如果所有API库都被单个项目引用,则也可以通过以Assembly(而不是Class)为目标,然后在约束逻辑中反映该程序集(请参见Assembly.GetReferencedAssemblies)来达到相同的效果。您可以通过存在custom属性来过滤处理后的程序集。

© www.soinside.com 2019 - 2024. All rights reserved.