Ken post is very interesting, but you are at a point where you should learn more about IoC βproductionβ containers, as some of them support this scenario.
In Autofac, for example, you can "generate" a factory as a delegate:
builder.RegisterGeneratedFactory<Func<IDialogController>>();
Then in your main form:
class MainForm ... { Func<IDialogController> _controllerFactory; public MainForm(Func<IDialogController> controllerFactory) { ... } void ShowDialog() { using (var controller = _controllerFactory()) { } }
Autofac will populate the controllerFactory constructor parameter at run time. In your unit tests, you can easily create a lambda for the constructor.
Nicholas blumhardt
source share