The https://learn.microsoft.com/en-us/dotnet/framework/mef/attributed-programming-model-overview-mef[Attributed Programming Model], also known as https://en.wikipedia.org/wiki/Attribute-oriented_programming[Attribute-oriented programming (@OP)], is a programming model used to embed attributes within codes. 

In this model, objects are required to conform to a specific structure so that they can be used by the https://learn.microsoft.com/en-us/dotnet/framework/mef/[Managed Extensibility Framework (MEF)].

MEF provides a way to discover available components implicitly, via *composition*. A MEF component, called a *part*, declaratively specifies: 

* both its dependencies, known as *imports*
* and what capabilities it makes available, known as *exports*

The https://learn.microsoft.com/en-us/dotnet/api/system.composition.exportattribute[ExportAttribute] declares that a part "exports", or provides to the composition container, an object that fulfills a particular contract. 

During composition, parts with imports that have matching contracts will have those dependencies filled by the exported object.

If the type doesn't implement the interface it is exporting there will be an issue at runtime (either a cast exception or just a container not filled with the exported type) leading to unexpected behaviors/crashes.

The rule raises an issue when a class doesn't implement or inherit the type declared in the `ExportAttribute`. 
