Почему бы просто не добавить этот фрагмент в код, который вы выполняете для компиляции вашего класса?
// define class Foo like you already did
return typeof(Foo);
, а затем
var type = (Type)evaluator.Compile(...
var myFooInstance = Activator.CreateInstance(type);
или даже лучше, просто скомпилируйте "фабричный метод" в свой код:)
// define class Foo like you already did
return new Func<IFoo>(() => new Foo());
и затем "снаружи" вы просто приводите возвращенное значение обратно в Func<IFoo>
и используете его:
var fooFactory = (Func<IFoo>)evaluator.Compile(...
var instance = fooFactory();