Mi è venuta in mente questa idea e mi interesserebbe un feedback da parte vostra a riguardo.
Per obbligare una classe ad avere un costruttore default (public e senza parametri), mi sono costruito una marker interface generica con constructor constraint:
public interface IDefaultConstructor<T> where T : new() {}
e quindi basta che la classe Foo implementi IDefaultConstructor per essere sicuri in fase di compilazione che essa abbia un costruttore default:
class Foo : IDefaultConstructor<Foo>
{
public Foo() // garantito!
{
// ...
}
// altri costruttori...
public Foo(int i)
{
//...
}
// il resto dei membri
}