私は似たようなことを達成しようとしていましたが、うまくいきました。以下のサンプル.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();
}
}