public List<MetadataType> GetMetadataTypesForOperation(IRequest httpReq, Operation op)
{
var typeMetadata = HostContext.TryResolve<INativeTypesMetadata>();
var typesConfig = HostContext.AppHost.GetTypesConfigForMetadata(httpReq);
var metadataTypes = typeMetadata != null
? typeMetadata.GetMetadataTypes(httpReq, typesConfig)
: new MetadataTypesGenerator(this, typesConfig)
.GetMetadataTypes(httpReq);
var types = new List<MetadataType>();
var reqType = FindMetadataType(metadataTypes, op.RequestType);
if (reqType != null)
{
types.Add(reqType);
AddReferencedTypes(reqType, metadataTypes, types);
}
var resType = FindMetadataType(metadataTypes, op.ResponseType);
if (resType != null)
{
types.Add(resType);
AddReferencedTypes(resType, metadataTypes, types);
}
var generator = new CSharpGenerator(typesConfig);
types.Each(x =>
{
x.DisplayType = x.DisplayType ?? generator.Type(x.Name, x.GenericArgs);
x.Properties.Each(p =>
p.DisplayType = p.DisplayType ?? generator.Type(p.Type, p.GenericArgs));
});
return types;
}