If a School
class relies on an EmailSender
class you might have to inject this EmailSender
through it's constructor with a generic interface like IMessagable
or IMessageSender
or even IEmailSender
so that it can be swapped out for something else in the future.
In order to do this you would create a read-only private field in the School
class.
But then you're saying that the School
HAS-A MessageSender
but surely it just USES it in a few of it's methods??