voy a publicar mi respuesta por parte del CodePlex Discussion aquí:
No estoy seguro de que es posible en la actualidad. Cuando usas Codeblocks (@ {}), en realidad estás escribiendo código dentro de un método, p. su código anterior haría algo como:
public void Execute()
{
this.Clear();
public class MyClass {
public MyClass() {
Three = new List<string>();
}
public string One { get; set; }
public int Two { get; set; }
public List<string> Three { get; set;}
}
}
... que por supuesto, no es válido C#. El otro problema al que se enfrentará es que para usar la serialización/deserialización de xml, debe conocerse el tipo, pero si define su tipo dentro de la plantilla, ¿cómo podría deserializarlo en primer lugar?
Lo que podría hacer, es utilizar una plantilla de base personalizado:
public class CustomTemplateBase<T> : TemplateBase<T>
{
public dynamic Instance { get; set; }
public dynamic CreateInstance(string typeName)
{
Type type = Type.GetType(typeName);
// You'd to your deserialisation here, I'm going to
// just cheat and return a new instance.
return Activator.CreateInstance(type);
}
}
El uso de una propiedad dinámica y tipo de retorno dinámico, hemos definido un método que nos permitirá crear una instancia (a través de la activación o deserialización, etc.) y llamar al acceso de miembros en él. Para usar eso en una plantilla, puede hacer:
@{
Instance = CreateInstance("ConsoleApplication1.MyClass, ConsoleApplication1");
Instance.One = "Hello World";
}
<h1>@Instance.One</h1>
Donde "MyClass" está definido en alguna parte de mi aplicación. Lo importante es que estoy creando una instancia por plantilla.
Si se pudiera pasar por alto esta no sería completamente la idea de tener modelos/views/controladores en el primer lugar? – rene
¿No puedes traer 'MyClass' en un archivo separado? OK, entonces eso hará 2 archivos por plantilla, pero funcionará. –
Puede desmarcar la "respuesta" y marcar la respuesta "Kirk Woll", ya que esa es la respuesta correcta. –