2011-05-09 6 views
7

Estoy tratando de usar una plantilla T4 personalizada para agregar nuevos Controladores a un proyecto MVC 3. Tengo mi propia plantilla como Scott Hanselman escribió en http://www.hanselman.com/blog/ModifyingTheDefaultCodeGenerationscaffoldingTemplatesInASPNETMVC.aspx, pero estoy interesado en profundizar un poco más en la clase MvcTextTemplateHost para ver qué más ofrece, para que podamos personalizar un poco más nuestros controladores, y ver cómo funciona interactuar con el cuadro de diálogo "Agregar controlador ...".¿Dónde puedo encontrar la especificación API para MvcTextTemplateHost?

Pero no puedo encontrar (después de buscar en Google, por supuesto ...) la referencia a esta clase, ni MSDN ni ningún otro sitio de MS ... alguna idea?

Gracias, Sergi

Respuesta

9

Encontrará que esto solo es extensible a un punto. En su lugar, pase tiempo con el nuevo paquete MvcScaffolding de Steven Sanderson. Él extendió estas cosas originales de MANERA MUY por encima de mis planes.

+0

Esto es exactamente lo que estaba haciendo, ya que me pareció que "Agregar controlador ..." y "Añadir punto de vista ..." sólo se puede hacer parte del trabajo :-) De todos modos, ¿tiene sentido crear instancias de MvcTextTemplateHost desde una plantilla de andamio? si es así, ¿en qué asamblea está? Gracias, Scott! – Sergi

3
using Microsoft.VisualStudio.Web.Mvc.Scaffolding.BuiltIn; 
using Microsoft.VisualStudio.Web.Mvc.UserInterface; 

C: \ Windows \ Microsoft.NET \ assembly \ GAC_MSIL \ Microsoft.VisualStudio.TextTemplating.10.0 \ v4.0_10.0.0.0__b03f5f7f11d50a3a \ Microsoft.VisualStudio.TextTemplating.10.0.dll Microsoft.VisualStudio .TextTemplating.10.0.dll

C: \ Windows \ Microsoft.NET \ assembly \ GAC_MSIL \ Microsoft.VisualStudio.TextTemplating.10.0 \ v4.0_10.0.0.0__b03f5f7f11d50a3a \ Microsoft.VisualStudio.TextTemplating.10.0.dll Microsoft .VisualStudio.TextTemplating.Interfaces.10.0.dll

C: \ Archivos de programa (x86) \ Microsoft Visua l Estudio 10,0 \ Common7 \ IDE Microsoft.VisualStudio.Web.Mvc.4.0.dll

Si agrega tesis como referencias a su proyecto Web ASP.NET MVC y la ajuste en la DLL correcta para su versión MVC (última referencia de dll arriba) 2.0 3.01 0r 4.0 (todavía Beta)

Puede copiar el código T4 (no las etiquetas) y ejecutarlo en un controlador que le dará intellisense y debugability que necesitaría para configurar los datos correctos de propiedades y demás, en el objeto MvcTextTemplateHost en la creación y llenarlo con datos significativos para ver lo que está haciendo (en teoría, esto funcionará, espero)

Como se dijo anteriormente al abrir estos en .NET Reflector se divulgará algo de información. No he investigado el código de MVCScaffolding que la fuente está en codeplex está en mi lista de tareas pendientes). La pregunta que tengo en este momento es con qué y cómo se pueblan las RelatedProperties en MvcTextTemplateHost cuando se ejecuta en VS.NET 2010 T4.

También se puede utilizar Tangible T4 Editor para intellisense.

5
public bool AddActionMethods { get; set; } 
internal ProjectItem AreaFolder { get; set; } 
public string AreaName { get; set; } 
public List<string> AssemblyPath { get; set; } 
public bool AutoEventWireup { get; set; } 
public List<string> ContentPlaceHolderIDs { get; set; } 
public Type ContextType { get; set; } 
public string ControllerName { get; set; } 
public string ControllerRootName { get; set; } 
public string EntitySetName { get; set; } 
public CompilerErrorCollection Errors { get; set; } 
[Dynamic] 
public object ExtendedProperties { [return: Dynamic] get; } 
public Encoding FileEncoding { get; set; } 
public string FileExtension { get; set; } 
public Version FrameworkVersion { get; set; } 
internal AppDomain GenerationAppDomain { get; set; } 
public bool IsContentPage { get; set; } 
public bool IsPartialView { get; set; } 
public string MasterPageFile { get; set; } 
IList<string> ITextTemplatingEngineHost.StandardAssemblyReferences { get; } 
IList<string> ITextTemplatingEngineHost.StandardImports { get; } 
public Type ModelType { get; set; } 
public string Namespace { get; set; } 
public string OutputFileExtension { get; set; } 
public IPluralizer Pluralizer { get; set; } 
public string PrimaryContentPlaceHolderID { get; set; } 
public PrimaryKey[] PrimaryKeys { get; set; } 
public bool ReferenceScriptLibraries { get; set; } 
public Dictionary<string, RelatedModel> RelatedProperties { get; set; } 
public string TemplateFile { get; set; } 
public Type ViewDataType { get; set; } 
public string ViewDataTypeName { get; set; } 
public string ViewName { get; set; } 
Cuestiones relacionadas