Extensibility

Sep 16, 2014 at 1:08 AM
Currently, NMG has a rather fixed API. To add mapping behaviors, one would have to go into a class and modify it, which isn't very clean. Overall, it doesn't lend itself to extensibility very well. For example:

CastleGenerator
FluentGenerator
MappingGenerator
ContractGenerator
ByCodeGenerator
EntityFrameworkGenerator

are all subclasses of AbstractGenerator, and only one should ever be created for every call to ApplicationController.Generate(), but there are instances of each created on the outset. If this and the CodeGenerator could be injected into the application controller, then extensibility could be achieved by overriding methods on the generator.

Then one could customize mapping behaviors by creating an assembly that could be loaded at runtime via reflection as a plugin.