Hi Carl,
from my experience marking classes and interfaces internal just for
the sake of decoupling does not feel right.
I generally prefer another approach:
* Use namespaces to structure and hide component interfaces and
implementations from intelli-sense, unless needed.
* make all interface implementations explicit. This ensures that you
don't use classes for doing something (except for the testing) and
stick to interfaces.
* mark public constructors with ObsoleteAttribute (and set its
description "For IoC only"). This will ensure that you do not create
your classes anywhere in the production code (it is ok to do so in
tests).
* Set "treat warnings as errors" to ON for your production code
(generally a good thing anyway)
Best regards,
Rinat Abdullin
http://rabdullin.com