17

T4 コード生成を使用して、現在のプロジェクトで定義されている型にアクセスできますか?

たとえば、インターフェイスがあり、その実装を別のクラスに委任したい場合、つまり

interface IDoSomething {
    public void do_something();
}

class DoSomethingImpl : IDoSomething {
    public void do_something() {
        // implementation...
    }
}

class SomeClass : IDoSomething {
    IDoSomething m_doSomething = new DoSomethingImpl();

    // forward calls to impl object
    public void do_something() {
        m_doSomething.do_something();
    }
}

SomeClassコード生成でコール転送を自動化したいと思います。これは可能ですか?

4

1 に答える 1

1

これはロックの問題を解決しませんが(VS2010は解決すると聞いていますが)、dllを一時的な場所にコピーして、コピーしたアセンブリを使用することができます。

<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ output extension=".txt" #>
<#@ import namespace="System.Reflection" #>
<#@ import namespace="System.IO" #>
<#    
var newFileName = System.IO.Path.GetTempFileName();
System.IO.File.Copy(@"C:\Development\CustomAssembly.dll",newFileName,true);

var assembly = Assembly.LoadFrom(newFileName);
var type = assembly.GetType("CustomAssembly.DummyClass");   
#>
<#=newFileName#>
<#=type#>
于 2011-05-16T01:54:41.767 に答える