The only thing that you really need to make public is the interface (not the concrete implementation).
The only thing that you really need to make public is the interface (not the concrete implementation). You can use an abstract factory or (easier) Ninject to map the public interface to the internal concrete; thus your client code just has to request an instance of "a thing" that implements the interface and your factory / container will return the implementation. You should read up on Dependency Inversion Principle as well as it goes hand-in-hand with this.
If your class is already internal then there is absolutely not difference between internal and public methods. Public methods of internal classes are only internally visible. If you stay with injecting concrete classes though you loose all the advantages of DI.So yes you should extract (internal) interfaces and inject the interfaces.
This requires that the configuration code has access to the classes by either beeing in the same assembly of the assembly must be declased as friend assembly. Futhermore, you have to configure Ninject to allow none public classes. See NinjectSettings.
You could use InternalsVisibleTo attribute in AssemblyInfo. Cs file like this assembly: InternalsVisibleTo("Assembly_That_Should_Access_The_Internal_Class").
I cant really gove you an answer,but what I can give you is a way to a solution, that is you have to find the anglde that you relate to or peaks your interest. A good paper is one that people get drawn into because it reaches them ln some way.As for me WW11 to me, I think of the holocaust and the effect it had on the survivors, their families and those who stood by and did nothing until it was too late.