我试图实现类似的东西,它工作正常。在下面的示例.tt
文件中,我所指的同一解决方案中我自己的程序集的名称是SomeLibrary
. 我正在反思的类是一个名为SomeLibrary.SomeInterface
. 有一些方法可以使它更通用,但我不想让示例过于复杂。另外,请不要关注此模板的整体效果,这只是为了让您对它的工作方式有一个印象:
<#@ template language="C#" #>
<#@ output extension=".cs" #>
<#@ assembly name="$(SolutionDir)$(SolutionName)\bin\$(ConfigurationName)\$(SolutionName).dll" #>
<#@ import namespace="System.Reflection" #>
<#
Type someIType = typeof(SomeLibrary.SomeInterface);
#>
namespace SomeLibrary
{
class <#=someIType.Name#>Impl: <#=someIType.Name#>
{
<#=someIType.Name#> encapsulatedIntf;
public <#=someIType.Name#>Impl(<#=someIType.Name#> anIntf)
{
encapsulatedIntf = anIntf;
}
// Methods to be implemented:
<#
MethodInfo[] methods = someIType.GetMethods();
foreach (MethodInfo m in methods)
{
#>
// <#=m#>;
<#
}
#>
}
}
就我而言,这会导致
namespace SomeLibrary
{
class SomeInterfaceImpl: SomeInterface
{
SomeInterface encapsulatedIntf;
public SomeInterfaceImpl(SomeInterface anIntf)
{
encapsulatedIntf = anIntf;
}
// Methods to be implemented:
// Int32 someMethod(Int32);
// System.String someOtherMethod();
}
}