クラスHierarchicalDictionaryと、Territory、Departmentなどの派生クラスがあります。HierarchicalDictionaryから派生するすべてのクラスに、ビルド中にそのクラスのタイプ(Territory、Departmentなど)のプロパティ「Hierarchy」が含まれるように制御したいと思います。 。そうでない場合は、ビルドを失敗させたいと思います。
つまり、TerritoryにTerritoryタイプのプロパティ階層が含まれていない場合、またはDepartmentにDepartmentタイプのプロパティ階層が含まれていない場合、ビルドは失敗するはずです。
だから私はコンパイル中にそのようにチェックされた状態にしたい(擬似コード):
foreach (Class1 that derive from HierarchicalDictionary)
if(!(Class1 contains property Hierarchy of type Class1))
build fail
CodeContractsについて考えましたが、ビルド中に条件によって失敗する可用性があるかどうかはわかりません。適切な方法があるのでしょうか?
UPD:私の状況に対する追加の制限について説明しようと思います:
HierarchicalDictionaryは(データベースに)格納されていないクラスです。また、派生クラスが格納されるため、対応するテーブルにはデータベース内の自己参照フィールドが含まれます。HierarchicalDictionaryからクラス「C1」を派生させる場合、このクラスにはタイプ「C1」のプロパティ(またはフィールド)「Hierarchy」が正確に含まれている必要があります。[ClassMustContainHierarchyFieldOfMyselfType]属性のように。そして、コンパイル中にその事実を制御したいと思います。HierarchicalDictionaryから派生したクラス「C2」があり、フィールド(またはプロパティ)「publicC2 Hierarcy」が含まれていない場合、ビルドは失敗するはずです。
「組み込み」ソリューションがない可能性があります。ビルド前またはビルド後のイベント、またはその他のもの(CodeContractsなど)を使用できますか?