Well, completely agree with you that people who provide their own implementation of core interfaces, classes of the framework should be very careful about it, and understand what they do and why, and what is the contract between the framework and user's code. Definitely all the errors related to such changes are not responsibility of the LLBLGen Framework developers, if that contract is broken.
So now understanding all the consequences of the changes, I wanted to provide my own implementation of the interface (similar to v3.x), and I can do that, but my code doesn't work as expected. We found it right away that we use a wrong constructor for EntityField2, and we have to use the one that accepts StaticEntityFieldsDataContainer. It makes sense till this point, but once we figured that the constructor StaticEntityFieldsDataContainer is internal - now it doesn't make sense.
As for me, looking into the overall design, and architecture of LLBLGen, where everything was open, configurable, and you can plug your custom stuff (types, predicates, authorization, etc.) easily, it was a bit surprising to see this limiting constraint. I can not really find a reason as per why do you want to keep constructor of that class internal.
So as for me it looks like a minor mistake that can easily be fixed without a lot of impact and re-verification.
Do you think you can make the change?
P.S. We do have a workaround for it - use reflection, but I'd rather do not go this way.
Thanks,
Anton