Dopo un non breve scambio di email con Paolo Arvati e in base a un suggerimento di Stefano Grevi, posto una nuova implementazione per il pattern:
public class FriendlyInheritableType
{
internal FriendlyInheritableType()
{
if (this.GetType().Assembly != typeof(FriendlyInheritableType).Assembly)
{
throw new NotSupportedException();
}
}
public static FriendlyInheritableType NewInstance()
{
return new FriendlyInheritableType();
}
}
Altrimenti, nella notazione del post precedente, FooInside deve o essere sealed, o implementare anche essa il pattern di FooBase, per non spezzare il limite di ereditarietà.