There are times when you are designing a control or a form in C#, whose constructor needs to be passed information. However, the control will also need a default constructor in order for the Windows Forms Designer to work correctly. This default constructor should not be called at run-time (only design-time), and this rule should be enforced. To do this, we need to add some code to our default constructor, that will throw an InvalidOperationException when it is called at run-time, but not at design-time.

The solution to this problem is to use GetService to return a System.ComponentModel.Design.IDesignerHost service. It will return null if the service isn’t running (i.e. if we are at run-time).

Take the following class as an example. It has a default constructor that contains our design time check, and another constructor that should be used at run-time. It also has a private method called CommonCtor, which contains construction code that should be ran for both constructors.