org.sonar.plugins.csharp.S4159.html Maven / Gradle / Ivy
Why is this an issue?
The Attributed Programming Model,
also known as 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 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 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
.
How to fix it
Code examples
Noncompliant code example
[Export(typeof(ISomeType))]
public class SomeType // Noncompliant: doesn't implement 'ISomeType'.
{
}
Compliant solution
[Export(typeof(ISomeType))]
public class SomeType : ISomeType
{
}
Resources
Documentation