C# public class DatabaseUpdater {
...
private IList<ModuleUpdater> GetModuleUpdaters(IObjectSpace objectSpace, IList<IModuleInfo> versionInfoList) {
List<ModuleUpdater> dbUpdaters = new List<ModuleUpdater>();
foreach(ModuleBase module in modules) {
Version moduleVersionFromDB = GetModuleVersionFromDB(versionInfoList, module.Name);
if(ForceUpdateDatabase || module.Version > moduleVersionFromDB) {
// !!!
Type[] updaterTypes = AssemblyHelper.GetTypes(module.GetType().Assembly, type => typeof(ModuleUpdater).IsAssignableFrom(type) && !type.IsAbstract && !type.IsGenericTypeDefinition);
// !!!
foreach(Type updaterType in updaterTypes) {
if(updaterType.GetConstructor(new Type[] { typeof(IObjectSpace), typeof(Version) }) != null) {
dbUpdaters.Add((ModuleUpdater)TypeHelper.CreateInstance(updaterType, objectSpace, moduleVersionFromDB));
}
else {
String errorMessage = String.Format("Unable to create an instance of the \"{0}\" type.\r\nThe type does not expose a constructor with the .ctor({1}, {2}) signature.", updaterType.FullName, typeof(IObjectSpace).FullName, typeof(Version).FullName);
throw new ObjectCreatingException(updaterType, errorMessage, null);
}
}
}
}
return dbUpdaters;
}
There may be a GetDeclaredModuleUpdaterTypes method, pretty similar to existing GetDeclaredControllerTypes and GetDeclaredExportedTypes methods in the ModuleBase class.