In my .NET 6 Standalone Code Analysis Tool I have a Compilation instance, a SemanticModel instance, and a ClassDeclarationSyntax instance.
I need to know if that class implements a specific interface (MediatR.IRequest<TRequest, TResponse>)
I can do it using string matching but I don't like that, is there a better way?
private static async Task AnalyzeClassAsync(Compilation compilation, SemanticModel model, ClassDeclarationSyntax @class)
{
var baseTypeModel = compilation.GetSemanticModel(@class.SyntaxTree);
foreach (var baseType in @class.BaseList.Types)
{
SymbolInfo symbolInfo = model.GetSymbolInfo(baseType.Type);
var originalSymbolDefinition = (INamedTypeSymbol)symbolInfo.Symbol.OriginalDefinition;
if (!originalSymbolDefinition.IsGenericType)
return;
if (originalSymbolDefinition.TypeParameters.Length != 2)
return;
if (originalSymbolDefinition.ToDisplayString() != "MediatR.IRequestHandler<TRequest, TResponse>")
return;
// Do other stuff here
}
}