We all know by now that the designer uses the empty constructor to show the form on the screen and the usercontrols. But you want to make a constructor to inject your presenter and you want everyone to use that constructor. And perhaps you want to do some other things in the constructor. But you know this will make the designer choke on your form and never show it again. Now you could just write all the code by hand from then on in… or not.

Just keep the empty/default constructor and make it obsolete and make it error so no one can use it ever again, except the designer because he doesn’t seem to care.

This is the C# way.

public class Class1
    {
        
        [Obsolete("reason", true)]
        public void Class1()
        {
        }
    }```
and this the VB.Net way

```vbnet
Public Class Class1

    <Obsolete("message", True)> _
    Public Sub New()

    End Sub

End Class

I know it isn’t pretty but it solves a problem in a more or less decent way. Let’s call it a workaround.