Skip to content

Instantly share code, notes, and snippets.

@hediet
Last active August 29, 2015 14:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hediet/4cc564377964ba5184c9 to your computer and use it in GitHub Desktop.
Save hediet/4cc564377964ba5184c9 to your computer and use it in GitHub Desktop.
DocumentationProvider using NuDoc
namespace Hediet.Reflection
{
interface IDocumentationProvider
{
string GetDocumentationText(MemberInfo memberInfo);
string GetDocumentationText(ParameterInfo memberInfo);
}
class XmlDocumentationProvider : IDocumentationProvider
{
private readonly Dictionary<MemberInfo, Member> documentation = new Dictionary<MemberInfo, Member>();
private Member GetXmlDocumentation(MemberInfo memberInfo)
{
Member member;
if (!documentation.TryGetValue(memberInfo, out member))
{
var r = DocReader.Read(memberInfo.Module.Assembly);
foreach (var element in r.Elements.OfType<Member>())
{
if (memberInfo == element.Info)
{
member = element;
break;
}
}
documentation.Add(memberInfo, member);
}
return member;
}
public string GetDocumentationText(MemberInfo memberInfo)
{
var member = GetXmlDocumentation(memberInfo);
if (member == null)
return null;
var summary = member.Elements.OfType<Summary>().FirstOrDefault();
if (summary == null)
return null;
return summary.ToText();
}
public string GetDocumentationText(ParameterInfo parameterInfo)
{
var member = GetXmlDocumentation(parameterInfo.Member);
if (member == null)
return null;
var summary = member.Elements.OfType<Param>().FirstOrDefault(p => p.Name == parameterInfo.Name);
if (summary == null)
return null;
return summary.ToText();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment