Open sandboxFocus

Class ContractAspect

A base aspect that can validate or change the value of fields, properties, indexers, and parameters.

Inheritance
ContractAspect
Namespace: Metalama.Framework.Aspects
Assembly: Metalama.Framework.dll
Syntax
[AttributeUsage(AttributeTargets.Property|AttributeTargets.Field|AttributeTargets.Parameter|AttributeTargets.ReturnValue)]
[Layers(new string[] { "Build" })]
[Inheritable]
public abstract class ContractAspect : Aspect, IAspect<IParameter>, IEligible<IParameter>, IAspect<IFieldOrPropertyOrIndexer>, IAspect, ICompileTimeSerializable, ITemplateProvider, IEligible<IFieldOrPropertyOrIndexer>
Remarks

A contract aspect can apply to the input or output data flow, or to both data flows, according to the ContractDirection value passed to the constructor. Since the current class does not know the value of this parameter before it is instantiated, this class cannot set the eligibility conditions using the BuildEligibility(IEligibilityBuilder<IFieldOrPropertyOrIndexer>) method. If a derived class targets a specific ContractDirection (i.e. if the choice is not left to the user), its implementation of BuildEligibility(IEligibilityBuilder<IFieldOrPropertyOrIndexer>) can call BuildEligibilityForDirection(IEligibilityBuilder<IFieldOrPropertyOrIndexer>, ContractDirection) methods. This means that eligibility can be checked upfront by the IDE before suggesting the code actions.

In any case, this aspect verifies the eligibility of the target with respect to the specific ContractDirection and target declaration. This verification cannot be skipped.

Constructors

Name Description
ContractAspect()
ContractAspect(ContractDirection)

Initializes a new instance of the ContractAspect class.

Fields

Name Description
BuildLayer

Methods

Name Description
BuildAspect(IAspectBuilder<IFieldOrPropertyOrIndexer>)
BuildAspect(IAspectBuilder<IParameter>)
BuildEligibility(IEligibilityBuilder<IFieldOrPropertyOrIndexer>)

Configures the eligibility of the aspect or attribute. Implementations are not allowed to reference non-static members. Implementations must call the implementation of the base class if it exists.

BuildEligibility(IEligibilityBuilder<IParameter>)

Configures the eligibility of the aspect or attribute. Implementations are not allowed to reference non-static members. Implementations must call the implementation of the base class if it exists.

BuildEligibilityForDirection(IEligibilityBuilder<IFieldOrPropertyOrIndexer>, ContractDirection)

Populates the IEligibilityBuilder for a field, property or indexer when the ContractDirection is known.

BuildEligibilityForDirection(IEligibilityBuilder<IParameter>, ContractDirection)

Populates the IEligibilityBuilder for a parameter when the ContractDirection is known.

GetActualDirection(IAspectBuilder, ContractDirection)

Gets the actual direction of the contract given the direction returned by GetDefinedDirection(IAspectBuilder), after resolving the Default value according to the characteristics of the target declaration, and after taking predecessors and secondary instances into account. The implementation of this method may return None to skip the aspect.

GetDefinedDirection(IAspectBuilder)

Gets or sets the direction of the data flow (Input, Output or Both) to which this contract applies, as defined by the current aspect. This method returns Default by default. When this method returns Default, the actual direction is determined according to the characteristics of the target declaration.

RedirectContracts(IAspectBuilder, IFieldOrPropertyOrIndexer, IParameter)

Redirects validation logic of ContractAspect from the specified property to the specified parameter.

Validate(dynamic?)

Extension Methods