void Hoge<T>(Func<T> factory) {
var t = factory();
のようにデリゲートを渡す手もある
これならインターフェースで問題ないし間接的にコンストラクタに引数渡すこともできる
Func<T>のかわりにLazy<T>でもいいけどやってることは同じ