public IEnumerable<Widget> GetAll()
{
if (this.cachedWidgets.None())
{
List<Type> widgetTypes = GetType().GetTypeInfo().Assembly.GetExportedTypes()
.Where(t => typeof(Widget).IsAssignableFrom(t) && !t.GetTypeInfo().IsAbstract)
.ToList();
foreach (var widget in widgetTypes
.Where(t => !typeof(IUserDefinedWidget).IsAssignableFrom(t))
.Select(widgetType => Activator.CreateInstance(widgetType) as Widget))
{
this.cachedWidgets.Add(widget.Category + widget.Name, widget);
}
}
return this.cachedWidgets.Values;
}