On Wed, 2009-12-09 at 16:20 +0100, Leszek Ciesielski wrote: > This foreach loop is a common pattern for loading subclasses/plugins > from an assembly, is there a better pattern for this?
Yes: assembly-level attributes. http://weblogs.asp.net/justin_rogers/articles/61042.aspx See the "1. Assembly Attribute Marking" section. In short, you'd add a new attribute: [AttributeUsage(AttributeTargets.Assembly, AllowMultiple=true)] class PluginAttribute : Attribute { public PluginAttribute (Type type) {this.Type = type;} public Type Type {get; private set;} } Then specify this attribute at the assembly level: [assembly:Plugin (typeof(Plugin1))] [assembly:Plugin (typeof(Plugin2))] // ... Then query the assembly for all the PluginAttributes: Assembly a = ...; PluginAttribute[] plugins = (PluginAttribute[]) a.GetCustomAttributes ( typeof(PluginAttribute), true); foreach (var plugin in plugins) // plugin.Type is the type to use as a plugin This can be significantly faster than using Assembly.GetTypes(), as only the types which are listed in [assembly:Plugin] attributes actually need to be loaded, which can significantly decrease the amount of memory consumed (depending on the number of types in the assembly). - Jon _______________________________________________ Mono-devel-list mailing list Mono-devel-list@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-devel-list