Nar*_*rek 5 c# t4 visual-studio-2010 host-object
当我尝试从<#+#>括号中声明的非静态方法访问Host对象时,一切正常.但我需要从类方法访问它,如下所示:
<#+
public class ProjectTraverser
{
public void Traverse()
{
var a = Host;
}
}
#>
Run Code Online (Sandbox Code Playgroud)
此模板执行时出现以下错误:"编译转换:无法通过嵌套类型'Microsoft.VisualStudio.TextTemplating7D03DF372FEAC3D3A28C011A41F02403.GeneratedTextTransformation.ProjectTraverser'd:\访问外部类型的非静态成员'Microsoft.VisualStudio.TextTemplating7D03DF372FEAC3D3A28C011A41F02403.GeneratedTextTransformation' Projects\Test Solutions\GettingStarted\TelerikMvc3RazorApplication\TextTemplate2.tt"
请分享任何想法.
正如FuleSnabel评论的那样,您所做的声明是针对嵌套类型的,它无法访问表示模板的封闭类型中的实例变量.
您要做的是将类型为ITextTemplatingEngineHost的Host属性添加到ProjectTraverser类(可能是静态的),然后从主模板中设置它.
回想起来,我希望我将主要的Host属性设置为静态,因为在同一AppDomain中为同一模板的不同实例设想多个主机并不是很明智,但是你生活和学习.
这是一个粗略的例子:
<#@ template hostspecific="true' #>
<#
ProjectTraverser.Host = Host;
#>
<#+
public class ProjectTraverser
{
public static ITextTemplatingEngineHost Host { get; set; }
public void Traverse()
{
var a = Host;
}
}
#>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1695 次 |
最近记录: |